GoCD 整行記(四):配置流水線

上篇文章我們已經(jīng)完成了流水線的創(chuàng)建,并且能夠編譯一個(gè) SpringBoot 項(xiàng)目

今天我將繼續(xù)完善這條流水線,將我們編譯好的 jar 包構(gòu)建成 docker 鏡像,并上傳到 DockerHub 倉(cāng)庫(kù)

功能梳理

  1. 前面我們已經(jīng)創(chuàng)建了 gocd-springboot-demo-pipelines 流水線(Pipeline),包含一個(gè) build 階段(Stage),包含一個(gè) build 任務(wù)(Job),執(zhí)行了一條命令(Task) ./gradlew clean build,這條命令會(huì)生成一個(gè) jar

    已有的流水線

  2. 這個(gè) jar 包會(huì)存儲(chǔ)在 gocd-agent 容器的 /godata/pipelines/Pipeline 名稱/項(xiàng)目名稱/build/libs

    jar 包路徑

  3. 將生成的 jar 包保存到本地 GoCD 服務(wù)的 Artifacts 倉(cāng)庫(kù)

  4. 新增一個(gè)階段 build-publish-docker-image,完成以下工作

    1. 從本地 Artifacts 倉(cāng)庫(kù) 拉取 jar
    2. jar 包構(gòu)建成 docker 鏡像
    3. 將鏡像推送到你的 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è)插件配置一下

  1. ADMIN -> Artifact Stores 進(jìn)入配置頁(yè)面

    進(jìn)入 Artifact Stores

  2. 點(diǎn)擊 Add 按鈕,開(kāi)始配置

    配置 Artifact plugin for docker 插件

    • Registry Type: Others
    • Docker Registry Url: https://index.docker.io/v1/
    • Username: 你的 DockerHub 用戶名
    • Password: 你的 DockerHub 密碼
  3. 點(diǎn)擊 Save 按鈕,保存配置

修改流水線配置

保存生成的 jar 包

  1. 進(jìn)入 gocd-springboot-demo-pipelines -> build -> build -> ARTIFACTS 配置界面
Artifacts 配置界面
  • 選中 Build
  • 點(diǎn)擊 Add Artifact 按鈕
  1. 配置 Artifact


    配置 Build Artifact
    • Source:這里要填寫(xiě)的是 jar 包的位置,參考:gocd-springboot-demo/build/libs/gocd-springboot-demo.jar
    • Destination:填寫(xiě)保存到 gocd-server 容器的位置:參考 gocd-springboot-demo
    • 這兩個(gè)路徑都是相對(duì)路徑
  2. 點(diǎn)擊 SAVE 按鈕,保存配置

  3. 運(yùn)行一下 Pipeline ,驗(yàn)證配置結(jié)果

Artifact 結(jié)果

根據(jù)圖中的路徑,可以看到生成的 jar 包已經(jīng)在 Artifacts 中了

新增構(gòu)建 docker 鏡像階段

  1. 進(jìn)入 pipelineStage 編輯界面,點(diǎn)擊 Add new stage 按鈕
    Stage 編輯界面
  1. 配置新創(chuàng)建的 Stage ,同時(shí)創(chuàng)建一個(gè)的 JobTask,這個(gè) Task 功能就是構(gòu)建一個(gè) jar 包的 docker 鏡像

    注意,此處執(zhí)行的命令依賴 Dockerfile 去構(gòu)建 docker 鏡像,gocd-springboot-demo 工程已經(jīng)包含了這個(gè)文件

配置 build-publish-docker-image Stage
  • 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

  1. 點(diǎn)擊 Save 按鈕

  2. 進(jìn)入剛剛創(chuàng)建的 Tasks 配置界面

    build-docker-image Task 配置界面
  1. 在構(gòu)建 docker 鏡像前,我們需要先拉取 jar 包,因此,需要新增一個(gè) Task

  2. 選中 Fetch Artifact ,點(diǎn)擊 Add Task 按鈕

新增 Fetch Artifact Task
配置 Fetch Artifact 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
  1. 點(diǎn)擊 Save 按鈕保存,按住 Tasks 前面的 8個(gè)灰點(diǎn)標(biāo)志修改一下順序,點(diǎn)擊 Save 保存修改
修改 Task 順序
  1. 運(yùn)行一下 pipeline 查看運(yùn)行結(jié)果
查看運(yùn)行結(jié)果
運(yùn)行日志
  1. 查看編譯好的 docker 鏡像

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

docker 鏡像查看

上傳 docker 鏡像

  1. 進(jìn)入 gocd-springboot-demo-pipelines -> build-publish-docker-image -> build-docker-image -> Artifacts 配置界面

    配置 docker Artifact 界面

  2. 選中 External ,點(diǎn)擊 Add Artifact 按鈕

配置 docker Artifact
  • id:參考:docker
  • Store id:選中 docker-hub 這是我們?cè)谖恼麻_(kāi)支配置的 Artifact Stores
  • Image:這個(gè)是你在 DockerHub 上創(chuàng)建的 repository
  1. 點(diǎn)擊 SAVE 按鈕,保存配置

  2. 運(yùn)行 Pipeline ,查看結(jié)果

    上傳 docker 鏡像日志

    日志中可以看到,GoCD 長(zhǎng)在上傳 docker 鏡像

    任務(wù)完成后,可以在 DockerHub 上查看到你上傳的 docker 鏡像

DockerHub 上查看上傳結(jié)果

至此,我們已經(jīng)成功讓 GoCD 將我們的 SpringBoot 工程自動(dòng)編譯成 jar 包,然后構(gòu)建成 docker 鏡像,最后上傳到 DockerHub 鏡像倉(cāng)庫(kù)。

后續(xù)文章我們將完成最后一步,將已經(jīng)構(gòu)建好的 docker 鏡像部署到服務(wù)器上。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容