上篇文章我们已经完成了流水线的创建,并且能够编译一个 SpringBoot
项目
今天我将继续完善这条流水线,将我们编译好的 jar
包构建成 docker 镜像,并上传到 DockerHub
仓库
功能梳理
-
前面我们已经创建了
gocd-springboot-demo-pipelines
流水线(Pipeline),包含一个build
阶段(Stage),包含一个build
任务(Job),执行了一条命令(Task)./gradlew clean build
,这条命令会生成一个jar
包
-
这个
jar
包会存储在gocd-agent
容器的/godata/pipelines/Pipeline 名称/项目名称/build/libs
下
- 这里的项目名称是在 GoCD 整行记(三):创建流水线配置
Part 1: Material
时设置的Alternate Checkout Path
属性
- 这里的项目名称是在 GoCD 整行记(三):创建流水线配置
将生成的
jar
包保存到本地GoCD
服务的Artifacts 仓库
-
新增一个阶段
build-publish-docker-image
,完成以下工作- 从本地
Artifacts 仓库
拉取jar
包 - 将
jar
包构建成docker
镜像 - 将镜像推送到你的
DockerHub
仓库
- 从本地
配置 Artifact Stores
在 GoCD 整行记(零):基于 Docker 打造 CI/CD 流水线这篇文章中,我们在启动 gocd-server
时已经安装了一个插件 docker-registry-artifact-plugin
,这个插件可以帮助我们将 docker
镜像推送到 DockerHub
仓库,使用前我们需要对这个插件配置一下
-
ADMIN
->Artifact Stores
进入配置页面
-
点击
Add
按钮,开始配置
- Registry Type: Others
- Docker Registry Url: https://index.docker.io/v1/
- Username: 你的 DockerHub 用户名
- Password: 你的 DockerHub 密码
点击
Save
按钮,保存配置
修改流水线配置
保存生成的 jar 包
- 进入
gocd-springboot-demo-pipelines -> build -> build -> ARTIFACTS
配置界面
- 选中
Build
- 点击
Add Artifact
按钮
-
配置 Artifact
- Source:这里要填写的是
jar
包的位置,参考:gocd-springboot-demo/build/libs/gocd-springboot-demo.jar
- Destination:填写保存到
gocd-server
容器的位置:参考gocd-springboot-demo
- 这两个路径都是相对路径
- Source:这里要填写的是
点击
SAVE
按钮,保存配置运行一下
Pipeline
,验证配置结果
根据图中的路径,可以看到生成的 jar
包已经在 Artifacts
中了
新增构建 docker 镜像阶段
- 进入
pipeline
的Stage
编辑界面,点击Add new stage
按钮
-
配置新创建的
Stage
,同时创建一个的Job
和Task
,这个Task
功能就是构建一个jar
包的docker
镜像注意,此处执行的命令依赖
Dockerfile
去构建docker
镜像,gocd-springboot-demo 工程已经包含了这个文件
Stage name:build-publish-docker-image
Job Name:build-docker-image
Task Type:Custom Command
Command:docker
-
Arguments:
build -t hezhong0711/gocd-springboot-demo # 此处替换为你创建 DockerHub repository 名称 .
Working Directory:这个是保存代码的路径,参考:gocd-springboot-demo
点击
Save
按钮-
进入刚刚创建的
Tasks
配置界面
在构建
docker
镜像前,我们需要先拉取jar
包,因此,需要新增一个Task
选中
Fetch Artifact
,点击Add Task
按钮
- Type of Fetch Artifact: GoCD
- Pipeline:gocd-springboot-demo-pipelines
- Stage:build
- Job:build
- Source:此处填写的是
jar
包保存的路径,参考:gocd-springboot-demo/gocd-springboot-demo.jar
- 勾选上
Source is a file
- Destination:拉取
jar
包的保存路径,参考:gocd-springboot-demo/build/libs
- 点击
Save
按钮保存,按住 Tasks 前面的 8个灰点标志修改一下顺序,点击Save
保存修改
- 运行一下
pipeline
查看运行结果
-
查看编译好的
docker
镜像进入
gocd-agent
容器,执行docker images
查看编译好的镜像
上传 docker
镜像
-
进入
gocd-springboot-demo-pipelines -> build-publish-docker-image -> build-docker-image -> Artifacts
配置界面
选中
External
,点击Add Artifact
按钮
- id:参考:docker
- Store id:选中
docker-hub
这是我们在文章开支配置的Artifact Stores
- Image:这个是你在
DockerHub
上创建的repository
点击
SAVE
按钮,保存配置-
运行
Pipeline
,查看结果
日志中可以看到,
GoCD
长在上传docker
镜像任务完成后,可以在
DockerHub
上查看到你上传的docker
镜像
至此,我们已经成功让 GoCD
将我们的 SpringBoot
工程自动编译成 jar
包,然后构建成 docker
镜像,最后上传到 DockerHub
镜像仓库。
后续文章我们将完成最后一步,将已经构建好的 docker
镜像部署到服务器上。