GitLab CI是一套持續(xù)集成開發(fā)方案界弧。
什么是持續(xù)集成
在多人協(xié)作開發(fā)中,如果一個人修改了代碼并提交搭综,可能會對其他人的代碼造成影響垢箕,從而導致程序出現(xiàn)bug,持續(xù)集成的目的是讓我們能夠及時的發(fā)現(xiàn)并改正這些bug兑巾,避免bug被累計条获,從而導致代碼最終不可合并。
為了達到這一要求蒋歌,需要做到兩方面:
- 每完成一個小功能帅掘,就把代碼及時提交到主干,及時暴露問題堂油。
- 對提交的代碼進行編譯修档、測試、部署等一系列的操作府框,中間任何一步發(fā)生問題吱窝,就通知對應的開發(fā)人員進行修改。
GitLab CI主要是幫助我們將對代碼的編譯迫靖、測試院峡、部署等一系列中間工作自動化掉,提升我們的效率系宜。
GitLab CI的工作原理
如圖照激,當我們提交代碼的時候,GitLab會通知GitLab-CI服務(wù)器中的runner程序盹牧,runner會對我們的代碼進行相應的處理俩垃,一旦處理中發(fā)生錯誤励幼,就會通過發(fā)送郵件等通知到我們,整個的過程我們可以稱為:進行了一次構(gòu)建(Pipeline)口柳。
runner是由gitlab提供的苹粟,我們只需要下載安裝就可以了,下載地址>>啄清。
為了不讓runner的執(zhí)行影響GitLab系統(tǒng)六水,runner需要部署在獨立的服務(wù)器上運行(如上圖中的GitLab-CI服務(wù)器),該服務(wù)器上可以跑多個runner程序辣卒,用于處理不同的構(gòu)建任務(wù)掷贾。
GitLab怎么知道有哪些runner的
安裝了runner之后,我們需要通過向GitLab注冊荣茫,之后GitLab就知道有哪些runner可以使用了想帅,注冊的方式>>。
runner怎么知道要跑哪些任務(wù)的
我們需要在項目根目錄當中放置一個.gitlab-ci.yml
配置文件啡莉,然后在配置文件中配置上我們需要運行的任務(wù)(比如測試港准、部署等),.gitlab-ci.yml
的內(nèi)容形如:
stages:
- build
- test
- deploy
job 1: # 編譯任務(wù)
stage: build
script: make build dependencies
job 2: # 編譯任務(wù)
stage: build
script: make build artifacts
job 3: # 測試任務(wù)
stage: test
script: make test
job 4: # 部署任務(wù)
stage: deploy
script: make deploy
在配置文件中有兩個概念我們需要注意一下:stage和job
stage
Stages 表示階段咧欣,我們可以定義多個 Stages浅缸,這些 Stages 會有以下特點:
- 所有 Stages 會按照順序運行,即當一個 Stage 完成后魄咕,下一個 Stage 才會開始
- 只有當所有 Stages 完成后衩椒,整個構(gòu)建過程才算成功
- 如果任何一個 Stage 失敗,那么后面的 Stages 不會執(zhí)行哮兰,該構(gòu)建任務(wù)失敗
因此毛萌,構(gòu)建(Pipeline)和stage的關(guān)系是
+--------------------------------------------------------+
| |
| Pipeline |
| |
| +-----------+ +------------+ +------------+ |
| | Stage 1 |---->| Stage 2 |----->| Stage 3 | |
| +-----------+ +------------+ +------------+ |
| |
+--------------------------------------------------------+
job
Jobs 表示構(gòu)建工作,表示某個 Stage 里面執(zhí)行的工作喝滞。我們可以在 Stages 里面定義多個 Jobs阁将,這些 Jobs 會有以下特點:
- 相同 Stage 中的 Jobs 會并行執(zhí)行
- 相同 Stage 中的 Jobs 都執(zhí)行成功時,該 Stage 才會成功
- 如果任何一個 Job 失敗右遭,那么該 Stage 失敗做盅,即該構(gòu)建任務(wù)失敗
所以,Jobs 和 Stage 的關(guān)系圖就是:
+------------------------------------------+
| |
| Stage 1 |
| |
| +---------+ +---------+ +---------+ |
| | Job 1 | | Job 2 | | Job 3 | |
| +---------+ +---------+ +---------+ |
| |
+------------------------------------------+