jenkins+docker 持續(xù)集成 持續(xù)交付

引言

面對(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ù)交付流程圖


image

持續(xù)集成,持續(xù)交付各個(gè)階段所使用的一些典型工具的使用,以及在各個(gè)階段中的相關(guān)團(tuán)隊(duì)的相關(guān)活動(dòng),以下圖為典型的DevOps相關(guān)的活動(dòng)

image

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:端口


image

根據(jù)提示從輸入administrator password 或者可以通過啟動(dòng)日志

docker logs devops-jenkins

查看這個(gè)password 如:


image

選擇安裝插件方式,這里我是默認(rèn)第一個(gè)


image

進(jìn)入插件安裝界面,連網(wǎng)等待插件安裝


image

安裝完插件后,進(jìn)入創(chuàng)建管理員界面


image

輸入完管理員賬號(hào)后,點(diǎn)擊continue as admin 進(jìn)入管理界面點(diǎn)擊系統(tǒng)管理-插件管理中安裝docker構(gòu)建插件和角色管理插件

image

安裝docker構(gòu)建插件,在可選插件中查找docker build step plugin


image

安裝角色管理插件,在可選插件中查找Role-based Authorization Strategy


image

安裝SSH插件,用于構(gòu)建成功后執(zhí)行遠(yuǎn)端服務(wù)器腳本從docker本地倉庫獲取鏡像后發(fā)布新版本


image

安裝 Email Extension Plugin 插件,配置自動(dòng)發(fā)送郵件


image

配置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))


image

點(diǎn)擊系統(tǒng)管理->Global Tool Configuration->找到maven點(diǎn)擊新增按鈕

image

點(diǎn)擊系統(tǒng)管理->系統(tǒng)設(shè)置
配置SSH


image

配置docker


image

設(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

配置郵件


image

jenkins權(quán)限

  1. 選擇系統(tǒng)管理->Configuration Global Security->進(jìn)入選擇啟用安全:
    TCP port for JNLP agents ->禁用,訪問控制-安全域->jenkins專有用戶數(shù)據(jù)庫,訪問控制-授權(quán)策略->Role-Based Strategy 如:


    image
  2. 選擇系統(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亦是如此。
  1. 選擇系統(tǒng)管理->管理用戶:新建幾個(gè)管理員用戶如:dmpadmin、tscadmin


    image
  2. 選擇系統(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ā)送郵件推送

源碼管理

image

構(gòu)建觸發(fā)器

image

插件安裝


image

web token 獲取


image

oschina webhook 配置
http://用戶名:webToken@Jenkins服務(wù)器地址:端口/generic-webhook-trigger/invoke

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

image

構(gòu)建

1、maven 構(gòu)建項(xiàng)目
2、構(gòu)建docker鏡像
3、推送docker鏡像


image

4、SSH執(zhí)行遠(yuǎn)端服務(wù)器腳本運(yùn)行最新鏡像


image

構(gòu)建后操作

發(fā)送郵件推送

image

驗(yàn)證構(gòu)建

見證奇跡的時(shí)候到了

點(diǎn)擊立即構(gòu)建


image

構(gòu)建成功后自動(dòng)發(fā)送了成功郵件


image
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容