引言
面對(duì)越來越多的微服務(wù),越來越頻繁的版本發(fā)布,上周末在家倒騰了jenkins+docker的持續(xù)集成和持續(xù)交付。
==實(shí)現(xiàn)了push tag 到git服務(wù)器后坐等新版本發(fā)布的郵件通知==,她會(huì)自動(dòng)觸發(fā)工程構(gòu)建和版本發(fā)布,那叫一個(gè)爽歪歪啊省心、省力。
下面來和大家的一起分享一下我的實(shí)踐過程。
持續(xù)集成原理
持續(xù)集成, 簡(jiǎn)稱CI(continuous integration).
- CI作為敏捷開發(fā)重要的一步,其目的在于讓產(chǎn)品快速迭代的同時(shí),盡可能保持高質(zhì)量.
- CI一種可以增加項(xiàng)目可見性,降低項(xiàng)目失敗風(fēng)險(xiǎn)的開發(fā)實(shí)踐。其每一次代碼更新,都要通過自動(dòng)化測(cè)試來檢測(cè)代碼和功能的正確性,只有通過自動(dòng)測(cè)試的代碼才能進(jìn)行后續(xù)的交付和部署.
- CI 是團(tuán)隊(duì)成員間(產(chǎn)研測(cè))更好地協(xié)調(diào)工作,更好的適應(yīng)敏捷迭代開發(fā),自動(dòng)完成減少人工干預(yù),保證每個(gè)時(shí)間點(diǎn)上團(tuán)隊(duì)成員提交的代碼都能成功集成的,可以很好的用于對(duì)各種WEB、APP項(xiàng)目的打包.
Jenkins
Jenkins
是一個(gè)用Java編寫的開源的持續(xù)集成工具,提供了軟件開發(fā)的持續(xù)集成服務(wù),可監(jiān)控并觸發(fā)持續(xù)重復(fù)的工作,具有開源,支持多平臺(tái)和插件擴(kuò)展,安裝簡(jiǎn)單,界面化管理等特點(diǎn)。
附網(wǎng)上jenkins持續(xù)交付流程圖
持續(xù)集成,持續(xù)交付各個(gè)階段所使用的一些典型工具的使用,以及在各個(gè)階段中的相關(guān)團(tuán)隊(duì)的相關(guān)活動(dòng),以下圖為典型的DevOps相關(guān)的活動(dòng)
jenkins和docker私有倉庫registry環(huán)境安裝
請(qǐng)先安裝好docker 配置好docker加速(你懂的!),沒有玩過的同學(xué)請(qǐng)先百度。
jenkins安裝
docker 安裝jenkins非常方便執(zhí)行下面的腳本就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
需要更多定制參數(shù)你可以參考
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及安裝插件
啟動(dòng)完jenkins后通過瀏覽器輸入地址http://部署jenkins主機(jī)IP:端口
根據(jù)提示從輸入administrator password 或者可以通過啟動(dòng)日志
docker logs devops-jenkins
查看這個(gè)password 如:
選擇安裝插件方式,這里我是默認(rèn)第一個(gè)
進(jìn)入插件安裝界面,連網(wǎng)等待插件安裝
安裝完插件后,進(jìn)入創(chuàng)建管理員界面
輸入完管理員賬號(hào)后,點(diǎn)擊continue as admin 進(jìn)入管理界面點(diǎn)擊系統(tǒng)管理-插件管理中安裝docker構(gòu)建插件和角色管理插件
安裝docker構(gòu)建插件,在可選插件中查找docker build step plugin
安裝角色管理插件,在可選插件中查找Role-based Authorization Strategy
安裝SSH插件,用于構(gòu)建成功后執(zhí)行遠(yuǎn)端服務(wù)器腳本從docker本地倉庫獲取鏡像后發(fā)布新版本
安裝 Email Extension Plugin 插件,配置自動(dòng)發(fā)送郵件
配置jenkins屬性及相關(guān)權(quán)限
jenkins屬性
點(diǎn)擊系統(tǒng)管理->Global Tool Configuration->找到j(luò)dk點(diǎn)擊新增按鈕(自動(dòng)安裝請(qǐng)先到Oracle注冊(cè)賬號(hào))
點(diǎn)擊系統(tǒng)管理->Global Tool Configuration->找到maven點(diǎn)擊新增按鈕
點(diǎn)擊系統(tǒng)管理->系統(tǒng)設(shè)置
配置SSH
配置docker
設(shè)置docker主機(jī)可以被遠(yuǎn)程訪問
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權(quán)限
-
選擇系統(tǒng)管理->Configuration Global Security->進(jìn)入選擇啟用安全:
TCP port for JNLP agents ->禁用,訪問控制-安全域->jenkins專有用戶數(shù)據(jù)庫,訪問控制-授權(quán)策略->Role-Based Strategy 如:
image - 選擇系統(tǒng)管理->Manage and Assign Roles->Manage Roles:
- 添加Global Roles(admin、member、ops、others),
設(shè)置全局角色(全局角色可以對(duì)jenkins系統(tǒng)進(jìn)行設(shè)置與項(xiàng)目的操作)
admin:對(duì)整個(gè)jenkins都可以進(jìn)行操作
ops:可以對(duì)所有的job進(jìn)行管理
other/member:只有讀的權(quán)限 -
添加project Roles(dmp-manager、dmp-view、tsc-manager、tsc-view)并且給添加的角色分配如下權(quán)限
image - 注意:在添加project Roles時(shí),如果想讓不同的用戶看到不同的job,必須設(shè)置Pattern,如上dmp_manager角色就只能查看以dmp開頭的job,Pattern規(guī)則必須是“dmp.”,注意是以“.”結(jié)尾的匹配規(guī)則,tsc亦是如此。
-
選擇系統(tǒng)管理->管理用戶:新建幾個(gè)管理員用戶如:dmpadmin、tscadmin
image -
選擇系統(tǒng)管理->Manage and Assign Roles->Assign Relos:把第三步的用戶加到user/group中并授于對(duì)應(yīng)的角色權(quán)限 如:
image
創(chuàng)建-編譯-打包-上傳docker鏡像任務(wù)-執(zhí)行遠(yuǎn)端腳本從私有倉庫獲取鏡像發(fā)布新版本-發(fā)布完成發(fā)送郵件推送
源碼管理
構(gòu)建觸發(fā)器
插件安裝
web token 獲取
oschina webhook 配置
http://用戶名:webToken@Jenkins服務(wù)器地址:端口/generic-webhook-trigger/invoke
如http://admin:dsfadfadsfaf@192.168.1.1:8080/generic-webhook-trigger/invoke
構(gòu)建
1、maven 構(gòu)建項(xiàng)目
2、構(gòu)建docker鏡像
3、推送docker鏡像
4、SSH執(zhí)行遠(yuǎn)端服務(wù)器腳本運(yùn)行最新鏡像
構(gòu)建后操作
發(fā)送郵件推送
驗(yàn)證構(gòu)建
見證奇跡的時(shí)候到了
點(diǎn)擊立即構(gòu)建
構(gòu)建成功后自動(dòng)發(fā)送了成功郵件