以下只演示Jenkins實(shí)現(xiàn)CI、CD過程中Job的創(chuàng)建過程。至于集成、交付所使用的腳本這里不做介紹。
一、前置條件
????????配置好各服務(wù)器間的信任關(guān)系
????????配置Jenkins的相關(guān)賬號(hào)信息
????????如gitlab賬號(hào)密碼、ssh key、gitlab API token、通知郵箱
????????以上兩步請(qǐng)參考Jenkins相關(guān)的配置篇章:http://www.itdecent.cn/p/4e0a67fb3360
二、Jenkins創(chuàng)建任務(wù)
1、創(chuàng)建CI的項(xiàng)目

此項(xiàng)目需要配置“源碼管理”、“構(gòu)建”及“構(gòu)建后操作”。
1.1、源碼管理:

1.2、構(gòu)建:

1.3、構(gòu)建后操作:

2、創(chuàng)建CD的項(xiàng)目
此項(xiàng)目需要配置“構(gòu)建”及“構(gòu)建后操作”。
2.1、構(gòu)建

2.2、構(gòu)建后操作:

3、創(chuàng)建管道項(xiàng)目

此項(xiàng)目需要配置“General”、“Build Triggers”及“Pipeline”。
3.1、General

3.2、Build Triggers
在Jenkins服務(wù)器上生成隨機(jī)token:
# openssl rand -hex 12
0f2a47c861133916d2e299e3


對(duì)應(yīng)生成GitLab觸發(fā)Jenkins鉤子地址格式:
http://jenkins服務(wù)器地址:8080/buildByToken/build?job=jenkins項(xiàng)目名&token=token值
本人創(chuàng)建中產(chǎn)生的鏈接為:http://192.168.12.235:8080/buildByToken/build?job=test_pipeline&token=0f2a47c861133916d2e299e3
3.3、Pipeline

到此點(diǎn)擊保存即完成了管道項(xiàng)目的創(chuàng)建
4、GitLab掛webhook(鉤子)
4.1、進(jìn)入GitLab操作臺(tái)(并選擇進(jìn)入要掛Webhook的項(xiàng)目)

此處進(jìn)入的為“test_ci_cd"項(xiàng)目

然后點(diǎn)擊下方的“Add wehook”

添加之后在下方會(huì)形成一條添加記錄。點(diǎn)擊“Test”即可驗(yàn)證配置是否成功(成功將觸發(fā)一次Jenkins完成的Job)

----------------------------------------------------------------------------------------------------------------------------
點(diǎn)擊“Test”后若出現(xiàn)如下提示信息,則說明配置確認(rèn)。

----------------------------------------------------------------------------------------------------------------------------
點(diǎn)擊“Test”后若出現(xiàn)如下出現(xiàn)警告,則說明配置異常。

----------------------------------------------------------------------------------------------------------------------------
返回Jenkins管理頁(yè)面,將查看到剛觸發(fā)wehook的執(zhí)行記錄。

進(jìn)入管道項(xiàng)目中查看本次各個(gè)項(xiàng)目的執(zhí)行時(shí)間,及狀態(tài)。

點(diǎn)擊進(jìn)入單個(gè)項(xiàng)目的某執(zhí)行記錄,還可查看對(duì)應(yīng)的日志。

到此便完成Jenkins+GitLab實(shí)現(xiàn)持續(xù)集成與持續(xù)部署。
????具體實(shí)現(xiàn)集成與部署需要根據(jù)不同的場(chǎng)景,采取相應(yīng)的腳本。此處不提供的腳本在于,每個(gè)系統(tǒng)的開發(fā)語言、及依賴服務(wù)都各不相同,所以腳本內(nèi)容不具備通用性。
????筆者腳本中大部分使用了shell和少量的Python,Python比較多是用于部署完后的自動(dòng)化測(cè)試。腳本思路編寫如下:
? ? CI過程:
????????????1、使用maven編譯代碼,生產(chǎn)部署包(PHP項(xiàng)目一般無該過程);
????????????2、驗(yàn)證生產(chǎn)部署包是否正??捎茫〞?huì)讓部署包運(yùn)行起來,并驗(yàn)證接口),驗(yàn)證后刪除;
? ? ? ? ? ? 3、將驗(yàn)證能運(yùn)行的部署包發(fā)送至分發(fā)服務(wù)器上;
? ? CD過程:
? ? ? ? ? ? 1、分發(fā)服務(wù)器將部署包發(fā)送至本次要更新的服務(wù)器上(可使用rsync或ansible等工具);
? ? ? ? ? ? 2、應(yīng)用服務(wù)器上執(zhí)行更新部署;
? ? ? ? ? ? 3、檢查部署是否成功(可用端口占用、部署包版本、服務(wù)注冊(cè)等方面進(jìn)行檢查)