以下只演示Jenkins實(shí)現(xiàn)CI姚垃、CD過(guò)程中Job的創(chuàng)建過(guò)程。至于集成盼忌、交付所使用的腳本這里不做介紹积糯。
一、前置條件
????????配置好各服務(wù)器間的信任關(guān)系
????????配置Jenkins的相關(guān)賬號(hào)信息
????????如gitlab賬號(hào)密碼谦纱、ssh key看成、gitlab API token、通知郵箱
????????以上兩步請(qǐng)參考Jenkins相關(guān)的配置篇章:http://www.reibang.com/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)如下提示信息搓侄,則說(shuō)明配置確認(rèn)。
----------------------------------------------------------------------------------------------------------------------------
點(diǎn)擊“Test”后若出現(xiàn)如下出現(xiàn)警告话速,則說(shuō)明配置異常讶踪。
----------------------------------------------------------------------------------------------------------------------------
返回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)的開(kāi)發(fā)語(yǔ)言告嘲、及依賴服務(wù)都各不相同错维,所以腳本內(nèi)容不具備通用性。
????筆者腳本中大部分使用了shell和少量的Python橄唬,Python比較多是用于部署完后的自動(dòng)化測(cè)試赋焕。腳本思路編寫(xiě)如下:
? ? CI過(guò)程:
????????????1、使用maven編譯代碼仰楚,生產(chǎn)部署包(PHP項(xiàng)目一般無(wú)該過(guò)程)隆判;
????????????2、驗(yàn)證生產(chǎn)部署包是否正成纾可用(會(huì)讓部署包運(yùn)行起來(lái)侨嘀,并驗(yàn)證接口),驗(yàn)證后刪除捂襟;
? ? ? ? ? ? 3咬腕、將驗(yàn)證能運(yùn)行的部署包發(fā)送至分發(fā)服務(wù)器上;
? ? CD過(guò)程:
? ? ? ? ? ? 1葬荷、分發(fā)服務(wù)器將部署包發(fā)送至本次要更新的服務(wù)器上(可使用rsync或ansible等工具)涨共;
? ? ? ? ? ? 2纽帖、應(yīng)用服務(wù)器上執(zhí)行更新部署;
? ? ? ? ? ? 3举反、檢查部署是否成功(可用端口占用懊直、部署包版本、服務(wù)注冊(cè)等方面進(jìn)行檢查)