閱讀914 返回首頁    go 魔獸


基於 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

  1. 創建 Jenkins 編排模版。

    新建模版,以如下內容為基礎,創建編排。

    1. jenkins:
    2. image: 'registry.aliyuncs.com/acs-sample/jenkins:latest'
    3. ports:
    4. - '8080:8080'
    5. - '50000:50000'
    6. volumes:
    7. - /var/lib/docker/jenkins:/var/jenkins_home
    8. privileged: true
    9. restart: always
    10. labels:
    11. aliyun.scale: '1'
    12. aliyun.probe.url: 'tcp://container:8080'
    13. aliyun.probe.initial_delay_seconds: '10'
    14. aliyun.routing.port_8080: jenkins
    15. links:
    16. - slave-nodejs
    17. slave-nodejs:
    18. image: 'registry.aliyuncs.com/acs-sample/jenkins-slave-dind-nodejs'
    19. restart: always
    20. volumes:
    21. - /var/run/docker.sock:/var/run/docker.sock
    22. labels:
    23. aliyun.scale: '1'
  2. 使用模板創建 Jenkins 應用和 slave 節點。

    也可以直接使用阿裏雲容器服務提供的 Jenkins 示例模版創建 Jenkins 應用和 slave 節點。

    1

  3. 創建成功後,Jenkins 應用和 slave 節點顯示在服務列表中。

    2

  4. 打開容器服務提供的訪問端點,就可以使用剛剛部署的 Jenkins 應用。

    3

實現自動測試及自動構建推送鏡像

  1. 將 slave 容器配置成 Jenkins 應用的 slave 節點。 打開 Jenkins 應用,進入係統設置界麵,選擇管理節點,新建節點,配置相應參數。如下圖所示。

    4

    注意:

  2. 創建項目實現自動化測試。

    1. 新建 Item,選擇構建一個自由風格的軟件項目。
    2. 填寫項目名稱,並選擇項目運行節點。此示例中填寫上述準備的 slave-nodejs-ut 節點。
      slaveut7
    3. 配置源碼管理和代碼分支。此示例中源代碼使用 GitHub 管理。
      slaveut8
    4. 配置構建觸發器,此示例采用結合 GitHub Webhooks & services 實現自動觸發項目執行。
      slaveut9
    5. 在 GitHub 中添加 Jenkins 的 service hook,完成自動觸發實現。

      在 GitHub 項目主頁單擊 Settings,單擊左側菜單欄中的 Webhooks & services,單擊 Add Service,在下拉框中選擇 Jenkins(Git plugin)。在 Jenkins hook url 對話框中填寫${Jenkins IP}/github-webhook/,例如:

      1. https://jenkins.cd****************.cn-beijing.alicontainer.com/github-webhook/

      slaveut10

    6. 增加 Execute shell 類型的構建步驟,編寫 shell 腳本執行測試。slaveut11本示例中的命令如下所示:

      1. pwd
      2. ls
      3. cd chapter2
      4. npm test
  3. 創建項目實現自動構建,推送鏡像。

    1. 新建 Item,選擇構建一個自由風格的軟件項目。
    2. 填寫項目名稱,並選擇項目運行節點。此示例中填寫上述準備的 slave-nodejs-ut 節點。
    3. 配置源碼管理和代碼分支。此示例中源代碼使用 GitHub 管理。
    4. 添加如下觸發器,設置隻有在單元測試成功之後才執行自動構建鏡像。
      slavebuild4
    5. 編寫構建鏡像和推送鏡像的 shell 腳本。
      slaveut12本示例的命令如下所示:
      1. cd chapter2
      2. docker build -t registry.aliyuncs.com/qinyujia-test/nodejs-demo .
      3. docker login -u ${yourAccount} -p ${yourPassword} registry.aliyuncs.com
      4. docker push registry.aliyuncs.com/qinyujia-test/nodejs-demo

自動重新部署應用

首次部署應用

使用編排模板,將 創建項目實現自動構建,推送鏡像 中創建的鏡像部署到容器服務中,創建 nodejs-demo 應用。

示例如下所示:

  1. ```
  2. express:
  3. image: 'registry.aliyuncs.com/qinyujia-test/nodejs-demo'
  4. expose:
  5. - '22'
  6. - '3000'
  7. restart: always
  8. labels:
  9. aliyun.routing.port_3000: express
  10. ```

自動重新部署

  1. 選擇剛剛創建的應用 nodejs-demo,創建觸發器。

    _

  2. 創建項目實現自動構建,推送鏡像 的 shell 腳本中添加一行,地址即為上文創建的觸發器給出的觸發器鏈接。

    1. curl ‘https://cs.console.aliyun.com/hook/trigger?triggerUrl=***==&secret=***’
  3. 創建項目實現自動構建,推送鏡像 的示例中的命令改為:

    1. cd chapter2
    2. docker build -t registry.aliyuncs.com/qinyujia-test/nodejs-demo .
    3. docker login -u ${yourAccount} -p ${yourPassword} registry.aliyuncs.com
    4. docker push registry.aliyuncs.com/qinyujia-test/nodejs-demo
    5. curl ‘https://cs.console.aliyun.com/hook/trigger?triggerUrl=***==&secret=***’

    到此,鏡像推送之後,Jenkins 會自動觸發重新部署 nodejs-demo 應用。

配置郵件推送結果

如果希望單元測試或者鏡像構建的結果能夠通過郵件推送給相關開發人員或者項目執行發起者。可以通過如下配置來實現。

  1. 在 Jenkins 主頁,選擇係統管理,係統設置,配置 Jenkins 係統管理員郵箱。

    email1

  2. 安裝 Extended Email Notification plugin,配置 SMTP server 等相關信息,並設置默認郵件接收人列表。如下圖所示。

    email2

以上是 Jenkins 應用係統參數設置,下麵是為需要用郵件推送結果的 Jenkins 項目進行相關配置。

  1. 在 Jenkins 項目中添加構建後操作步驟。選擇 Editable Email Notification 類型,填寫郵件接收人列表。

    email3

  2. 添加郵件發送觸發器。

    email4

最後更新:2016-11-23 16:04:16

  上一篇:go 基於容器 HUB 的持續交付__DevOps_用戶指南_容器服務-阿裏雲
  下一篇:go 服務發現和負載均衡概述__服務發現和負載均衡_用戶指南_容器服務-阿裏雲