jenkins+docker 持續整合

袁志健發表於2018-08-08

引言

面對越來越多的微服務,越來越頻繁的版本釋出,上週末在家倒騰了jenkins+docker的持續整合和持續交付。

==實現了push tag 到git伺服器後坐等新版本釋出的郵件通知==,她會自動觸發工程構建和版本釋出,那叫一個爽歪歪啊省心、省力。

下面來和大家的一起分享一下我的實踐過程。

持續整合原理

持續整合, 簡稱CI(continuous integration).

  • CI作為敏捷開發重要的一步,其目的在於讓產品快速迭代的同時,儘可能保持高質量.
  • CI一種可以增加專案可見性,降低專案失敗風險的開發實踐。其每一次程式碼更新,都要通過自動化測試來檢測程式碼和功能的正確性,只有通過自動測試的程式碼才能進行後續的交付和部署.
  • CI 是團隊成員間(產研測)更好地協調工作,更好的適應敏捷迭代開發,自動完成減少人工干預,保證每個時間點上團隊成員提交的程式碼都能成功整合的,可以很好的用於對各種WEB、APP專案的打包.

Jenkins

Jenkins 是一個用Java編寫的開源的持續整合工具,提供了軟體開發的持續整合服務,可監控並觸發持續重複的工作,具有開源,支援多平臺和外掛擴充套件,安裝簡單,介面化管理等特點。

附網上jenkins持續交付流程圖

image

持續整合,持續交付各個階段所使用的一些典型工具的使用,以及在各個階段中的相關團隊的相關活動,以下圖為典型的DevOps相關的活動

image

jenkins和docker私有倉庫registry環境安裝

請先安裝好docker 配置好docker加速(你懂的!),沒有玩過的同學請先百度。

jenkins安裝

docker 安裝jenkins非常方便執行下面的指令碼就OK了

docker run --name devops-jenkins --user=root -p 8080:8080 -p 50000:50000 -v /opt/data/jenkins_home:/var/jenkins_home -d jenkins/jenkins:lts
複製程式碼

需要更多定製引數你可以參考 https://github.com/jenkinsci/docker

registry安裝

docker run --name devops-registry -p 5000:5000 -v /opt/devdata/registry:/var/lib/registry -d registry
複製程式碼

jenkins配置

初始化jenkins及安裝外掛

啟動完jenkins後通過瀏覽器輸入地址http://部署jenkins主機IP:埠

image
根據提示從輸入administrator password 或者可以通過啟動日誌

docker logs devops-jenkins
複製程式碼

檢視這個password 如:

image

選擇安裝外掛方式,這裡我是預設第一個

image

進入外掛安裝介面,連網等待外掛安裝

image

安裝完外掛後,進入建立管理員介面

image

輸入完管理員賬號後,點選continue as admin 進入管理介面點選系統管理-外掛管理中安裝docker構建外掛和角色管理外掛

image

安裝docker構建外掛,在可選外掛中查詢docker build step plugin

image

安裝角色管理外掛,在可選外掛中查詢Role-based Authorization Strategy

image

安裝SSH外掛,用於構建成功後執行遠端伺服器指令碼從docker本地倉庫獲取映象後釋出新版本

image

安裝 Email Extension Plugin 外掛,配置自動傳送郵件

image

配置jenkins屬性及相關許可權

jenkins屬性

點選系統管理->Global Tool Configuration->找到jdk點選新增按鈕(自動安裝請先到Oracle註冊賬號)

image
點選系統管理->Global Tool Configuration->找到maven點選新增按鈕

image

點選系統管理->系統設定 配置SSH

image

配置docker

image

設定docker主機可以被遠端訪問

vim /usr/lib/systemd/system/docker.service
在ExecStart=/usr/bin/docker daemon 後追加 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

如:
ExecStart=/usr/bin/docker daemon -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
複製程式碼

配置郵件

image

jenkins許可權

  1. 選擇系統管理->Configuration Global Security->進入選擇啟用安全: TCP port for JNLP agents ->禁用,訪問控制-安全域->jenkins專有使用者資料庫,訪問控制-授權策略->Role-Based Strategy 如:
    image
  2. 選擇系統管理->Manage and Assign Roles->Manage Roles:
  • 新增Global Roles(admin、member、ops、others), 設定全域性角色(全域性角色可以對jenkins系統進行設定與專案的操作) admin:對整個jenkins都可以進行操作 ops:可以對所有的job進行管理 other/member:只有讀的許可權
  • 新增project Roles(dmp-manager、dmp-view、tsc-manager、tsc-view)並且給新增的角色分配如下許可權
    image
  • 注意:在新增project Roles時,如果想讓不同的使用者看到不同的job,必須設定Pattern,如上dmp_manager角色就只能檢視以dmp開頭的job,Pattern規則必須是“dmp.”,注意是以“.”結尾的匹配規則,tsc亦是如此。
  1. 選擇系統管理->管理使用者:新建幾個管理員使用者如:dmpadmin、tscadmin

    image

  2. 選擇系統管理->Manage and Assign Roles->Assign Relos:把第三步的使用者加到user/group中並授於對應的角色許可權 如:

    image

建立-編譯-打包-上傳docker映象任務-執行遠端指令碼從私有倉庫獲取映象釋出新版本-釋出完成傳送郵件推送

原始碼管理

image

構建觸發器

image
外掛安裝
image
web token 獲取
image
oschina webhook 配置 http://使用者名稱:webToken@Jenkins伺服器地址:埠/generic-webhook-trigger/invoke

如http://admin:dsfadfadsfaf@192.168.1.1:8080/generic-webhook-trigger/invoke

image

構建

1、maven 構建專案 2、構建docker映象 3、推送docker映象

image
4、SSH執行遠端伺服器指令碼執行最新映象
image

構建後操作

傳送郵件推送

image

驗證構建

見證奇蹟的時候到了

點選立即構建

image

構建成功後自動傳送了成功郵件

image

相關文章