上篇文章我们已经完成了流水线的创建,并且能够编译一个 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下
jar 包路径- 这里的项目名称是在 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进入配置页面
进入 Artifact Stores -
点击
Add按钮,开始配置
配置 Artifact plugin for docker 插件- 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
配置 Build 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 编辑界面
-
配置新创建的
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配置界面build-docker-image Task 配置界面
在构建
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配置界面
配置 docker Artifact 界面 选中
External,点击Add Artifact按钮

- id:参考:docker
- Store id:选中
docker-hub这是我们在文章开支配置的Artifact Stores - Image:这个是你在
DockerHub上创建的repository
点击
SAVE按钮,保存配置-
运行
Pipeline,查看结果
上传 docker 镜像日志日志中可以看到,
GoCD长在上传docker镜像任务完成后,可以在
DockerHub上查看到你上传的docker镜像

至此,我们已经成功让 GoCD 将我们的 SpringBoot 工程自动编译成 jar 包,然后构建成 docker 镜像,最后上传到 DockerHub 镜像仓库。
后续文章我们将完成最后一步,将已经构建好的 docker 镜像部署到服务器上。








