
CI/CD簡介
CI/CD 是一種持續(xù)開發(fā)軟件的方法,側(cè)重于軟件開發(fā)過程中的自動化,可以不斷地進(jìn)行構(gòu)建、測試和部署代碼。使用這種方法,從新代碼開發(fā)到部署,可以減少人工干預(yù)甚至不用干預(yù)
CI(Continuous Integration):持續(xù)集成,也就是當(dāng)每一次更改的代碼被推送到遠(yuǎn)程分支后,可以創(chuàng)建一組腳本來自動地構(gòu)建和測試這些更改,確保這些更改可以通過一些基本的準(zhǔn)則,減少引入錯誤的機(jī)會
CD:
(Continuous Delivery):持續(xù)交付,在持續(xù)集成的基礎(chǔ)上更進(jìn)一步,當(dāng)每一次更改的代碼落庫后,不僅會構(gòu)建和測試,也會進(jìn)行部署,但是部署需要人工干預(yù),手動的有目的進(jìn)行部署
(Continuous Deployment):持續(xù)部署,持續(xù)集成之外的另一個步驟,類似于持續(xù)交付。不同之處在于,它不是手動部署應(yīng)用程序,而是將其設(shè)置為自動部署。不需要人為干預(yù)
Gitlab CI/CD 也就是 Gitlab 提供了上面的 CI/CD 能力,可以進(jìn)行持續(xù)集成,持續(xù)交付和持續(xù)部署
GitLab?CI/CD?工作流程

簡單說就是開發(fā)者在push或者merge代碼到指定分支的時候,會觸發(fā)CI/CD,GitLab CI/CD配置文件(.gitlab-ci.yml)中的Job需要通過GitLab-Runner來執(zhí)行,執(zhí)行過后的產(chǎn)物可以直接用來部署。這里會涉及Pipeline 、Stages、Jobs幾個概念

Pipelines:流水線?(在根目錄包含.gitlab-ci.yml文件的代碼push | merge時候會生成對應(yīng)的流水線)
Stages:階段 (定義什么時候執(zhí)行Jobs,比如:在build階段執(zhí)行代碼編譯打包任務(wù))
Jobs:任務(wù)是GitLab CI系統(tǒng)中可以獨(dú)立控制并運(yùn)行的最小單位?(定義了該做什么,比如:編譯和測試代碼)
流水線包含一個或多個階段,每個階段又可以有多個任務(wù),這就是他們之間的一個關(guān)系。每個Job可以指定用來執(zhí)行它的Runner,同一個Stage的多個Job可并發(fā)執(zhí)行,Job中至少要包含script元素用來編寫該任務(wù)運(yùn)行的腳本,only元素用來指定能觸發(fā)CI/CD的代碼分支,tags元素用來指定該Job用哪個Runner來執(zhí)行
如果同一個Stage中的所有Job都執(zhí)行成功,Pipeline就會進(jìn)入下一個Stage;如果一個Stage中的任何一個Job執(zhí)行失敗,Pipeline就不會進(jìn)入下一個Stage,提前結(jié)束
前面有說到Job是需要GitLab-Runner才能運(yùn)行起來的,那么它們是怎么關(guān)聯(lián)起來的呢?

上面這張圖采用docker來安裝GitLab-Runner,然后將GitLab的實(shí)例URL和Token在GitLab-Runner上進(jìn)行注冊,這樣GitLab和GitLab-Runner就能夠關(guān)聯(lián)上
GitLab-Runner注冊Runners主要有兩種方式:
1、在GitLab的admin area進(jìn)入Runners菜單,里面就會有GitLab?Instance URL和Token

2、進(jìn)到具體代碼倉庫,點(diǎn)開setting菜單,再進(jìn)入CI/CD中的Runners,里面也會有GitLab Instance URL和Token

Runner注冊成功后會在GitLab的Runners列表中找到

GitLab CI/CD完整執(zhí)行過程如下:
1、編寫CI/CD配置文件.gitlab-ci.yml,GitLab會檢測到它,配置文件里可指定可觸發(fā)CI/CD的代碼分支
2、在push或者merge代碼到上述指定的分支,會觸發(fā)CI/CD流程,就會生成一個對應(yīng)的Pipeline
3、GitLab-Runner就會將代碼拉進(jìn)來執(zhí)行Pipeline中的Job,每個Job可指定用來執(zhí)行它的Runner
4、Runner會初始化Excutor,然后通過git把GitLab的代碼倉庫拉過來,按照.gitlab-ci.yml里定義的任務(wù)來執(zhí)行
5、本項目把Runner執(zhí)行后的產(chǎn)物通過掛載的方式,把打包后的代碼掛載到Nginx的根目錄中,這樣就完成了自動化部署
Runner執(zhí)行Job過程:

總結(jié)
GitLab CI/CD最主要的兩個步驟就是編寫.gitlab-ci.yml,然后到GitLab-Runner中注冊Runner,Runner可以是一個虛擬機(jī),物理機(jī),docker容器,或者一個容器集群。GitLab與Runner之間通過API進(jìn)行通信,因此只需要Runner所在的機(jī)器有網(wǎng)絡(luò)并且可以訪問GitLab服務(wù)器即可
參考資料
https://docs.gitlab.com/ee/ci
https://docs.gitlab.com/runner/register
https://zhuanlan.zhihu.com/p/441581000
喜歡的話別忘了?分享、點(diǎn)贊、收藏?三連~
歡迎關(guān)注公眾號?前端進(jìn)階體驗?收獲更多優(yōu)質(zhì)文章~