GitLab CI是開源的持續(xù)集成服務(wù),GitLab Runner是一個(gè)開源項(xiàng)目,用于運(yùn)作任務(wù),并把結(jié)果發(fā)送回GitLab,它與GitLab CI一起使用。
持續(xù)集成
持續(xù)(Continuous integration ,縮寫CI)是一種軟件工程流程,是將所有軟件工程師對(duì)于軟件的工作副本持續(xù)集成到共享主線(mainline)的一種舉措。該名稱最早由Grady Booch 在他的布區(qū)方法中提出,不過(guò)他并不支持在一天中進(jìn)行數(shù)次集成。之后舉措成為極限編程驅(qū)動(dòng)開發(fā)(TDD)的作法中,通常還會(huì)搭配自動(dòng)單元測(cè)試。持續(xù)集成的提出主要是為解決軟件進(jìn)行系統(tǒng)集成時(shí)面臨的各項(xiàng)問(wèn)題。-維基百科
持續(xù)集成一般包括一些流程:
合并代碼
安裝依賴
編譯
測(cè)試
發(fā)布
持續(xù)集成必須依靠以下原則:
- 維護(hù)一個(gè)代碼知識(shí)庫(kù)
- 自動(dòng)構(gòu)建,通過(guò)一個(gè)單一指令來(lái)達(dá)成系統(tǒng)建構(gòu)
- 一旦代碼更改好,下一個(gè)階段應(yīng)該要進(jìn)行所有的測(cè)試,以確保軟件開發(fā)的成果匹配預(yù)期
- 減少?zèng)_突,一天至少提交一次
- 每次變更必須要快速完成,如此一來(lái)便可以避免集成問(wèn)題
- 盡可能的縮小測(cè)試環(huán)境和正式環(huán)境的差距,服務(wù)虛擬化通常更容易實(shí)現(xiàn)這個(gè)目標(biāo)
- 盡早集成
- 任何人都可以查看最后的建構(gòu)的結(jié)果
- 自動(dòng)部署
持續(xù)集成可以快速發(fā)現(xiàn)錯(cuò)誤,定位錯(cuò)誤也比較容易,它的目的就是讓產(chǎn)品可以快速迭代,同時(shí)還能保證高質(zhì)量。核心措施代碼集成到主干前,必須通過(guò)自動(dòng)化測(cè)試。
GitLab CI

GitLab CI是為GitLab提供持續(xù)集成服務(wù)的一整套系統(tǒng)。在GitLab8.0以后的版本是默認(rèn)集成了GitLab-CI并且默認(rèn)啟用的。
使用GitLab CI需要在倉(cāng)庫(kù)跟目錄創(chuàng)建一個(gè)gitlab-ci.yml的文件,它用來(lái)指定持續(xù)集成需要運(yùn)行的環(huán)境,以及要執(zhí)行的腳本。還需要設(shè)置一個(gè)gitlab-runner,當(dāng)有代碼push變更的時(shí)候,gitlab-runner會(huì)自動(dòng)開始pipeline,并在gitlab上顯示持續(xù)集成的結(jié)果。
GitLab Runner
GitLab Runner是使用Go語(yǔ)言編寫的,可以做為一個(gè)二進(jìn)制文件運(yùn)行,不需要特定的語(yǔ)言要求,他創(chuàng)建了一個(gè)持續(xù)集成的的環(huán)境,所需要的程序使用Docker來(lái)安裝,配置好GitLab Runner運(yùn)行的環(huán)境。GitLab Runner實(shí)際上都是docker container,由GitLab Runner來(lái)自動(dòng)創(chuàng)建,運(yùn)行的環(huán)境由GitLab Runner程序控制,使用docker來(lái)建立runner,使得每一個(gè)虛擬環(huán)境都干凈,輕量,相互隔離,互不影響。
GitLab-Runner一般都是配合GitLab-CI使用的,在GitLab里面定義一個(gè)屬于這個(gè)工程的軟件集成腳本,用來(lái)自動(dòng)化地完成一些軟件集成工作。
GitLab-Runner執(zhí)行情況如下:

- 本地代碼改動(dòng)
- 變動(dòng)代碼推送到GitLab上
- GitLab 將這個(gè)變動(dòng)通知GitLab-CI
- GitLab-CI找出這個(gè)工程相關(guān)聯(lián)的gitlab-runner
- gitlab-runner把代碼更新到本地
- 根據(jù)預(yù)設(shè)置的條件配置好環(huán)境
- 根據(jù)預(yù)定義的腳本(一般是.gitlab-ci.yml)執(zhí)行
- 把執(zhí)行結(jié)果通知給GitLab
- GitLab顯示最終執(zhí)行的結(jié)果
gitlab-runner可以在不同的主機(jī)上部署,也可以在同一個(gè)主機(jī)上設(shè)置多個(gè)gitlab-runner ,還可以根據(jù)不同的環(huán)境設(shè)置不同的環(huán)境,比如我們需要區(qū)分研發(fā)環(huán)境,測(cè)試環(huán)境以及正式環(huán)境等。