上篇文章我們已經(jīng)完成了流水線的創(chuàng)建,并且能夠編譯一個(gè) SpringBoot 項(xiàng)目
今天我將繼續(xù)完善這條流水線,將我們編譯好的 jar 包構(gòu)建成 docker 鏡像,并上傳到 DockerHub 倉(cāng)庫(kù)
功能梳理
-
前面我們已經(jīng)創(chuàng)建了
gocd-springboot-demo-pipelines流水線(Pipeline),包含一個(gè)build階段(Stage),包含一個(gè)build任務(wù)(Job),執(zhí)行了一條命令(Task)./gradlew clean build,這條命令會(huì)生成一個(gè)jar包
已有的流水線 -
這個(gè)
jar包會(huì)存儲(chǔ)在gocd-agent容器的/godata/pipelines/Pipeline 名稱/項(xiàng)目名稱/build/libs下
jar 包路徑- 這里的項(xiàng)目名稱是在 GoCD 整行記(三):創(chuàng)建流水線配置
Part 1: Material時(shí)設(shè)置的Alternate Checkout Path屬性
- 這里的項(xiàng)目名稱是在 GoCD 整行記(三):創(chuàng)建流水線配置
將生成的
jar包保存到本地GoCD服務(wù)的Artifacts 倉(cāng)庫(kù)-
新增一個(gè)階段
build-publish-docker-image,完成以下工作- 從本地
Artifacts 倉(cāng)庫(kù)拉取jar包 - 將
jar包構(gòu)建成docker鏡像 - 將鏡像推送到你的
DockerHub倉(cāng)庫(kù)
- 從本地
配置 Artifact Stores
在 GoCD 整行記(零):基于 Docker 打造 CI/CD 流水線這篇文章中,我們?cè)趩?dòng) gocd-server 時(shí)已經(jīng)安裝了一個(gè)插件 docker-registry-artifact-plugin,這個(gè)插件可以幫助我們將 docker 鏡像推送到 DockerHub 倉(cāng)庫(kù),使用前我們需要對(duì)這個(gè)插件配置一下
-
ADMIN->Artifact Stores進(jìn)入配置頁(yè)面
進(jìn)入 Artifact Stores -
點(diǎn)擊
Add按鈕,開(kāi)始配置
配置 Artifact plugin for docker 插件- Registry Type: Others
- Docker Registry Url: https://index.docker.io/v1/
- Username: 你的 DockerHub 用戶名
- Password: 你的 DockerHub 密碼
點(diǎn)擊
Save按鈕,保存配置
修改流水線配置
保存生成的 jar 包
- 進(jìn)入
gocd-springboot-demo-pipelines -> build -> build -> ARTIFACTS配置界面

- 選中
Build - 點(diǎn)擊
Add Artifact按鈕
-
配置 Artifact
配置 Build Artifact- Source:這里要填寫(xiě)的是
jar包的位置,參考:gocd-springboot-demo/build/libs/gocd-springboot-demo.jar - Destination:填寫(xiě)保存到
gocd-server容器的位置:參考gocd-springboot-demo - 這兩個(gè)路徑都是相對(duì)路徑
- Source:這里要填寫(xiě)的是
點(diǎn)擊
SAVE按鈕,保存配置運(yùn)行一下
Pipeline,驗(yàn)證配置結(jié)果

根據(jù)圖中的路徑,可以看到生成的 jar 包已經(jīng)在 Artifacts 中了
新增構(gòu)建 docker 鏡像階段
- 進(jìn)入
pipeline的Stage編輯界面,點(diǎn)擊Add new stage按鈕
Stage 編輯界面
-
配置新創(chuàng)建的
Stage,同時(shí)創(chuàng)建一個(gè)的Job和Task,這個(gè)Task功能就是構(gòu)建一個(gè)jar包的docker鏡像注意,此處執(zhí)行的命令依賴
Dockerfile去構(gòu)建docker鏡像,gocd-springboot-demo 工程已經(jīng)包含了這個(gè)文件

Stage name:build-publish-docker-image
Job Name:build-docker-image
Task Type:Custom Command
Command:docker
-
Arguments:
build -t hezhong0711/gocd-springboot-demo # 此處替換為你創(chuàng)建 DockerHub repository 名稱 . Working Directory:這個(gè)是保存代碼的路徑,參考:gocd-springboot-demo
點(diǎn)擊
Save按鈕-
進(jìn)入剛剛創(chuàng)建的
Tasks配置界面build-docker-image Task 配置界面
在構(gòu)建
docker鏡像前,我們需要先拉取jar包,因此,需要新增一個(gè)Task選中
Fetch Artifact,點(diǎn)擊Add Task按鈕


- Type of Fetch Artifact: GoCD
- Pipeline:gocd-springboot-demo-pipelines
- Stage:build
- Job:build
- Source:此處填寫(xiě)的是
jar包保存的路徑,參考:gocd-springboot-demo/gocd-springboot-demo.jar - 勾選上
Source is a file - Destination:拉取
jar包的保存路徑,參考:gocd-springboot-demo/build/libs
- 點(diǎn)擊
Save按鈕保存,按住 Tasks 前面的 8個(gè)灰點(diǎn)標(biāo)志修改一下順序,點(diǎn)擊Save保存修改

- 運(yùn)行一下
pipeline查看運(yùn)行結(jié)果


-
查看編譯好的
docker鏡像進(jìn)入
gocd-agent容器,執(zhí)行docker images查看編譯好的鏡像

上傳 docker 鏡像
-
進(jìn)入
gocd-springboot-demo-pipelines -> build-publish-docker-image -> build-docker-image -> Artifacts配置界面
配置 docker Artifact 界面 選中
External,點(diǎn)擊Add Artifact按鈕

- id:參考:docker
- Store id:選中
docker-hub這是我們?cè)谖恼麻_(kāi)支配置的Artifact Stores - Image:這個(gè)是你在
DockerHub上創(chuàng)建的repository
點(diǎn)擊
SAVE按鈕,保存配置-
運(yùn)行
Pipeline,查看結(jié)果
上傳 docker 鏡像日志日志中可以看到,
GoCD長(zhǎng)在上傳docker鏡像任務(wù)完成后,可以在
DockerHub上查看到你上傳的docker鏡像

至此,我們已經(jīng)成功讓 GoCD 將我們的 SpringBoot 工程自動(dòng)編譯成 jar 包,然后構(gòu)建成 docker 鏡像,最后上傳到 DockerHub 鏡像倉(cāng)庫(kù)。
后續(xù)文章我們將完成最后一步,將已經(jīng)構(gòu)建好的 docker 鏡像部署到服務(wù)器上。








