引言
面對越來越多的微服務,越來越頻繁的版本釋出,上週末在家倒騰了jenkins+docker的持續整合和持續交付。
==實現了push tag 到git伺服器後坐等新版本釋出的郵件通知==,她會自動觸發工程構建和版本釋出,那叫一個爽歪歪啊省心、省力。
下面來和大家的一起分享一下我的實踐過程。
持續整合原理
持續整合, 簡稱CI(continuous integration).
- CI作為敏捷開發重要的一步,其目的在於讓產品快速迭代的同時,儘可能保持高質量.
- CI一種可以增加專案可見性,降低專案失敗風險的開發實踐。其每一次程式碼更新,都要通過自動化測試來檢測程式碼和功能的正確性,只有通過自動測試的程式碼才能進行後續的交付和部署.
- CI 是團隊成員間(產研測)更好地協調工作,更好的適應敏捷迭代開發,自動完成減少人工干預,保證每個時間點上團隊成員提交的程式碼都能成功整合的,可以很好的用於對各種WEB、APP專案的打包.
Jenkins
Jenkins 是一個用Java編寫的開源的持續整合工具,提供了軟體開發的持續整合服務,可監控並觸發持續重複的工作,具有開源,支援多平臺和外掛擴充套件,安裝簡單,介面化管理等特點。
附網上jenkins持續交付流程圖
持續整合,持續交付各個階段所使用的一些典型工具的使用,以及在各個階段中的相關團隊的相關活動,以下圖為典型的DevOps相關的活動
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:埠
根據提示從輸入administrator password 或者可以通過啟動日誌docker logs devops-jenkins
複製程式碼
檢視這個password 如:
選擇安裝外掛方式,這裡我是預設第一個
進入外掛安裝介面,連網等待外掛安裝
安裝完外掛後,進入建立管理員介面
輸入完管理員賬號後,點選continue as admin 進入管理介面點選系統管理-外掛管理中安裝docker構建外掛和角色管理外掛
安裝docker構建外掛,在可選外掛中查詢docker build step plugin
安裝角色管理外掛,在可選外掛中查詢Role-based Authorization Strategy
安裝SSH外掛,用於構建成功後執行遠端伺服器指令碼從docker本地倉庫獲取映象後釋出新版本
安裝 Email Extension Plugin 外掛,配置自動傳送郵件
配置jenkins屬性及相關許可權
jenkins屬性
點選系統管理->Global Tool Configuration->找到jdk點選新增按鈕(自動安裝請先到Oracle註冊賬號)
點選系統管理->Global Tool Configuration->找到maven點選新增按鈕點選系統管理->系統設定 配置SSH
配置docker
設定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
複製程式碼
配置郵件
jenkins許可權
- 選擇系統管理->Configuration Global Security->進入選擇啟用安全: TCP port for JNLP agents ->禁用,訪問控制-安全域->jenkins專有使用者資料庫,訪問控制-授權策略->Role-Based Strategy 如:
- 選擇系統管理->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)並且給新增的角色分配如下許可權
- 注意:在新增project Roles時,如果想讓不同的使用者看到不同的job,必須設定Pattern,如上dmp_manager角色就只能檢視以dmp開頭的job,Pattern規則必須是“dmp.”,注意是以“.”結尾的匹配規則,tsc亦是如此。
-
選擇系統管理->管理使用者:新建幾個管理員使用者如:dmpadmin、tscadmin
-
選擇系統管理->Manage and Assign Roles->Assign Relos:把第三步的使用者加到user/group中並授於對應的角色許可權 如:
建立-編譯-打包-上傳docker映象任務-執行遠端指令碼從私有倉庫獲取映象釋出新版本-釋出完成傳送郵件推送
原始碼管理
構建觸發器
外掛安裝 web token 獲取 oschina webhook 配置 http://使用者名稱:webToken@Jenkins伺服器地址:埠/generic-webhook-trigger/invoke如http://admin:dsfadfadsfaf@192.168.1.1:8080/generic-webhook-trigger/invoke
構建
1、maven 構建專案 2、構建docker映象 3、推送docker映象
4、SSH執行遠端伺服器指令碼執行最新映象構建後操作
傳送郵件推送
驗證構建
見證奇蹟的時候到了
點選立即構建
構建成功後自動傳送了成功郵件