914
魔獸
基於 Jenkins 的持續交付__DevOps_用戶指南_容器服務-阿裏雲
持續集成作為敏捷開發重要的一步,其目的在於讓產品快速迭代的同時,盡可能保持高質量。每一次代碼更新,都要通過自動化測試來檢測代碼和功能的正確性,隻有通過自動測試的代碼才能進行後續的交付和部署。本文主要介紹如何將時下最流行的持續集成工具之一的 Jenkins 結合阿裏雲容器服務,實現自動測試和鏡像構建推送。
以下內容演示如何通過阿裏雲容器服務 Jenkins 實現自動測試和 Docker 鏡像構建,實現高質量的持續集成。
背景信息
每次代碼提交到 GitHub 上的 nodejs 的項目後,阿裏雲容器服務 Jenkins 都會自動觸發單元測試,測試通過則繼續鏡像構建及推送到目標鏡像倉庫中,最後郵件通知結果。
大致流程如下圖所示:
slave-nodejs 用於進行單元測試,構建鏡像和推送鏡像的 slave 節點。
Jenkins 相關介紹
Jenkins 是基於 Java 開發的一種開源持續集成工具,監控並觸發持續重複的工作,具有開源,支持多平台和插件擴展,安裝簡單,界麵化管理等特點。Jenkins 使用 job 來描述每一步工作。節點是用來執行項目的環境。Master 節點是 Jenkins job 的默認執行環境,也是 Jenkins 應用本身的安裝環境。
master/slave
master/slave 相當於 server 和 agent 的概念。master 提供 web 接口讓用戶來管理 job 和 slave,job 可以運行在 master 本機或者被分配到 slave 上運行。一個 master 可以關聯多個 slave 用來為不同的 job 或相同的 job 的不同配置來服務。
可以通過配置多個 slave 為不同項目準備單獨的測試和構建環境。
注意:本文中提到的 Jenkins job 和項目均指的是 Jenkins 一個構建單元,執行單元。
使用容器服務部署 Jenkins 應用和 slave 節點
不同應用構建、測試所需要的依賴不同,最佳實踐是使用包含相應的運行時依賴和工具的不同 Slave 容器執行測試和構建。通過阿裏雲容器服務提供的針對 Python、NodeJS、go 等不同環境的 Slave 鏡像以及示例模板,用戶可以簡單快速地生成 Jenkins 應用以及各種 slave 節點,在 Jenkins 應用中配置節點信息,然後在構建項目中指定執行節點,從而實現整個持續集成流程。
注意:有關阿裏雲容器服務提供的開發 slave 節點鏡像,參見 https://github.com/AliyunContainerService/jenkins-slaves。
創建 Jenkins 編排模版。
新建模版,以如下內容為基礎,創建編排。
jenkins:
image: 'registry.aliyuncs.com/acs-sample/jenkins:latest'
ports:
- '8080:8080'
- '50000:50000'
volumes:
- /var/lib/docker/jenkins:/var/jenkins_home
privileged: true
restart: always
labels:
aliyun.scale: '1'
aliyun.probe.url: 'tcp://container:8080'
aliyun.probe.initial_delay_seconds: '10'
aliyun.routing.port_8080: jenkins
links:
- slave-nodejs
slave-nodejs:
image: 'registry.aliyuncs.com/acs-sample/jenkins-slave-dind-nodejs'
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
labels:
aliyun.scale: '1'
使用模板創建 Jenkins 應用和 slave 節點。
也可以直接使用阿裏雲容器服務提供的 Jenkins 示例模版創建 Jenkins 應用和 slave 節點。
創建成功後,Jenkins 應用和 slave 節點顯示在服務列表中。
打開容器服務提供的訪問端點,就可以使用剛剛部署的 Jenkins 應用。
實現自動測試及自動構建推送鏡像
將 slave 容器配置成 Jenkins 應用的 slave 節點。 打開 Jenkins 應用,進入係統設置界麵,選擇管理節點,新建節點,配置相應參數。如下圖所示。
注意:
- 標簽是 slave 的唯一標識。
- slave 容器和 Jenkins 容器同時運行在阿裏雲平台上,因此需要填寫外網訪問不到的容器節點 IP,隔離測試環境。
- 添加 Credential 的時候,使用創建 slave-nodejs 鏡像的 Dockerfile 裏的 jenkins 用戶(初始密碼為 jenkins)。鏡像 Dockerfile 的地址為 https://github.com/AliyunContainerService/jenkins-slaves/tree/master/jenkins-slave-dind-nodejs。
創建項目實現自動化測試。
- 新建 Item,選擇構建一個自由風格的軟件項目。
- 填寫項目名稱,並選擇項目運行節點。此示例中填寫上述準備的 slave-nodejs-ut 節點。
- 配置源碼管理和代碼分支。此示例中源代碼使用 GitHub 管理。
- 配置構建觸發器,此示例采用結合 GitHub Webhooks & services 實現自動觸發項目執行。
在 GitHub 中添加 Jenkins 的 service hook,完成自動觸發實現。
在 GitHub 項目主頁單擊 Settings,單擊左側菜單欄中的 Webhooks & services,單擊 Add Service,在下拉框中選擇 Jenkins(Git plugin)。在 Jenkins hook url 對話框中填寫
${Jenkins IP}/github-webhook/
,例如:https://jenkins.cd****************.cn-beijing.alicontainer.com/github-webhook/
增加 Execute shell 類型的構建步驟,編寫 shell 腳本執行測試。
本示例中的命令如下所示:
pwd
ls
cd chapter2
npm test
創建項目實現自動構建,推送鏡像。
- 新建 Item,選擇構建一個自由風格的軟件項目。
- 填寫項目名稱,並選擇項目運行節點。此示例中填寫上述準備的 slave-nodejs-ut 節點。
- 配置源碼管理和代碼分支。此示例中源代碼使用 GitHub 管理。
- 添加如下觸發器,設置隻有在單元測試成功之後才執行自動構建鏡像。
- 編寫構建鏡像和推送鏡像的 shell 腳本。
本示例的命令如下所示:
cd chapter2
docker build -t registry.aliyuncs.com/qinyujia-test/nodejs-demo .
docker login -u ${yourAccount} -p ${yourPassword} registry.aliyuncs.com
docker push registry.aliyuncs.com/qinyujia-test/nodejs-demo
自動重新部署應用
首次部署應用
使用編排模板,將 創建項目實現自動構建,推送鏡像 中創建的鏡像部署到容器服務中,創建 nodejs-demo 應用。
示例如下所示:
```
express:
image: 'registry.aliyuncs.com/qinyujia-test/nodejs-demo'
expose:
- '22'
- '3000'
restart: always
labels:
aliyun.routing.port_3000: express
```
自動重新部署
選擇剛剛創建的應用 nodejs-demo,創建觸發器。
在 創建項目實現自動構建,推送鏡像 的 shell 腳本中添加一行,地址即為上文創建的觸發器給出的觸發器鏈接。
curl ‘https://cs.console.aliyun.com/hook/trigger?triggerUrl=***==&secret=***’
把 創建項目實現自動構建,推送鏡像 的示例中的命令改為:
cd chapter2
docker build -t registry.aliyuncs.com/qinyujia-test/nodejs-demo .
docker login -u ${yourAccount} -p ${yourPassword} registry.aliyuncs.com
docker push registry.aliyuncs.com/qinyujia-test/nodejs-demo
curl ‘https://cs.console.aliyun.com/hook/trigger?triggerUrl=***==&secret=***’
到此,鏡像推送之後,Jenkins 會自動觸發重新部署 nodejs-demo 應用。
配置郵件推送結果
如果希望單元測試或者鏡像構建的結果能夠通過郵件推送給相關開發人員或者項目執行發起者。可以通過如下配置來實現。
在 Jenkins 主頁,選擇係統管理,係統設置,配置 Jenkins 係統管理員郵箱。
安裝 Extended Email Notification plugin,配置 SMTP server 等相關信息,並設置默認郵件接收人列表。如下圖所示。
以上是 Jenkins 應用係統參數設置,下麵是為需要用郵件推送結果的 Jenkins 項目進行相關配置。
在 Jenkins 項目中添加構建後操作步驟。選擇 Editable Email Notification 類型,填寫郵件接收人列表。
添加郵件發送觸發器。
最後更新:2016-11-23 16:04:16
上一篇:
基於容器 HUB 的持續交付__DevOps_用戶指南_容器服務-阿裏雲
下一篇:
服務發現和負載均衡概述__服務發現和負載均衡_用戶指南_容器服務-阿裏雲
查詢鏡像商品列表__API參考_雲市場-阿裏雲
在哪裏可以查到RDS的權限定義___雲數據庫(RDS)授權問題_授權常見問題_訪問控製-阿裏雲
1.1 開通服務__第一章 快速開始_使用手冊_分析型數據庫-阿裏雲
設置防盜鏈__安全管理_開發人員指南_對象存儲 OSS-阿裏雲
配置 Tomcat 容器__應用設置_用戶指南_企業級分布式應用服務 EDAS-阿裏雲
關閉Pipeline__Pipeline管理_Console參考手冊_數據集成-阿裏雲
【推薦】Windows係統異常重啟以及藍屏的處理__藍屏夯機_操作係統類問題_Windows操作運維問題_雲服務器 ECS-阿裏雲
付費模式轉換__購買指南_數據傳輸-阿裏雲
安裝與配置__Console參考手冊_數據集成-阿裏雲
接入詳細說明__設備端接入手冊_阿裏雲物聯網套件-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲