当前位置: 首页 > news >正文

Docker+Jenkins+git实现Golang项目自动部署

1. 安装Docker

2. 拉取Jenkins镜像

使用以下命令从Docker Hub拉取Jenkins的官方镜像:

# 拉取Jenkins的官方镜像
docker pull jenkins/jenkins:lts

3. 创建并运行Jenkins容器(使用root权限)

重点!重点!重点!为了让Jenkins容器以root权限运行,并且jenkins容器可以使用宿主机上的docker命令,你可以使用以下命令:

# 创建并运行Jenkins容器,使用root权限
docker run -d -u root \ -p 8080:8080 \ -p 50000:50000 \ --name jenkins \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /usr/bin/docker:/usr/bin/docker \ -v jenkins_home:/var/jenkins_home \ jenkins/jenkins:lts
  • - -d :让容器在后台运行。
  • - -u root :指定容器以root用户身份运行。
  • - -p 8080:8080 :将容器内的8080端口映射到主机的8080端口,用于访问Jenkins的Web界面。
  • - -p 50000:50000 :将容器内的50000端口映射到主机的50000端口,用于Jenkins的代理通信。
  • - -v jenkins_home:/var/jenkins_home :将主机的卷 jenkins_home 挂载到容器内的 /var/jenkins_home 目录,用于持久化存储Jenkins的数据。
  • - -v /var/run/docker.sock:/var/run/docker.sock :将主机的Docker套接字文件挂载到容器内,允许容器内的Jenkins使用主机的Docker服务
  • -v /usr/bin/docker:/usr/bin/docker :将宿主机的 Docker 命令行工具挂载到容器中,使得 Jenkins 容器可以使用 docker 命令

4.Go项目

项目地址:gupengfei770/jenkins-go

Dockerfile,参考文档:docker部署第一个Go项目_docker部署go项目-CSDN博客

#这里使用Go 1.23.0版本的Alpine Linux镜像  AS  bulider 指定镜像的阶段名称
FROM golang:1.23.0-alpine AS bulider
WORKDIR /webapp
COPY . .
RUN go env -w GOPROXY=https://goproxy.cn,direct && go mod tidy
RUN go build -o web-app#使用一个更小基础镜像Alpine来运行程序
#Alpine是一个极简的Linux发行版,适合部署阶段
FROM alpine:latest#设置工作目录/build
WORKDIR /build#从编译阶段的镜像中拷贝编译后的二进制文件到运行镜像中
#--from=bulider 是第一阶段编译的镜像
COPY --from=bulider /webapp/web-app /build/web-appCMD ["/build/web-app"]

Jenkinsfile文件

pipeline {agent anystages {stage('初始化 Go 模块') {steps {sh 'echo $PATH'sh 'pwd'}}stage('构建 Docker 镜像') {steps {sh 'pwd'sh 'docker build -t jenkins-go:v1.0 .'}}stage('部署 Docker 镜像') {steps {sh 'pwd'sh 'docker rm -f myJenkinsGo'  sh 'docker run -d -p 8282:8080 --name myJenkinsGo jenkins-go:v1.0'}}}
}

 5.jenkins配置

访问:http://<你的ip地址>:8080

获取密码:

通过提示输入密码,选择推荐安装插件,插件安装时间一般较长,安装失败可以点击重试,一般都会下载下来,也可以更换下载源。

6.创建流水线项目

 

 

 

7.创建自由风格项目

 

 

 8.总结

无论是流水线还是自由风格部署。都是利用docker操作了。

相关文章:

  • Git(三):分支管理
  • 深入理解Zephyr Manifest:现代嵌入式开发的项目管理利器
  • 华为云Flexus+DeepSeek征文|基于华为云Flexus云服务的CCE容器高可用部署Dify-LLM应用开发平台
  • 车载学习(8)——CAPL与诊断相关
  • Ubuntu 安装Telnet服务
  • C#的泛型和匿名类型
  • 语音情感识别:CNN-LSTM 和注意力增强 CNN-LSTM 模型的比较分析
  • 在 Windows 上使用 Docker Desktop 快速搭建本地 Kubernetes 环境(附详细部署教程)
  • 死锁相关知识
  • MySQL 的 WITH ROLLUP 功能
  • WinUI3入门7:使用风格 共享控件样式
  • 以太网基础①以太网相关通信接口
  • Jmeter中常用的断言方法有哪些?
  • redis02
  • 机器学习竞赛中的“A榜”与“B榜”:机制解析与设计深意
  • Mac电脑 - Sublim Text 代码编辑器
  • el-image在表格中显示,弹出的预览图片被遮挡,如何解决
  • 基于Spring Boot+Vue的“暖寓”宿舍管理系统设计与实现(源码及文档)
  • Android13 增加产品配置文件
  • CMake实践:指定gcc版本编译和交叉编译
  • 北京免费做网站/seo上海推广公司
  • 公司做社交网站诈骗/2022年搜索引擎优化指南
  • 雁塔区住房和城乡建设局网站/重庆整站seo
  • 一个完整的个人网站/襄阳网站seo
  • 做网站主页效果图/优化大师优化项目有
  • 做一公司网站/营销方案怎么写