GitLab CI是開源的持續整合服務,GitLab Runner是一個開源專案,用於運作任務,並把結果傳送回GitLab,它與GitLab CI一起使用。
持續整合
持續(Continuous integration ,縮寫CI)是一種軟體工程流程,是將所有軟體工程師對於軟體的工作副本持續整合到共享主線(mainline)的一種舉措。該名稱最早由Grady Booch 在他的布區方法中提出,不過他並不支援在一天中進行數次整合。之後舉措成為極限程式設計驅動開發(TDD)的作法中,通常還會搭配自動單元測試。持續整合的提出主要是為解決軟體進行系統整合時面臨的各項問題。-維基百科
持續整合一般包括一些流程:
合併程式碼 安裝依賴 編譯 測試 釋出
持續整合必須依靠以下原則:
- 維護一個程式碼知識庫
- 自動構建,通過一個單一指令來達成系統建構
- 一旦程式碼更改好,下一個階段應該要進行所有的測試,以確保軟體開發的成果匹配預期
- 減少衝突,一天至少提交一次
- 每次變更必須要快速完成,如此一來便可以避免整合問題
- 儘可能的縮小測試環境和正式環境的差距,服務虛擬化通常更容易實現這個目標
- 儘早整合
- 任何人都可以檢視最後的建構的結果
- 自動部署
持續整合可以快速發現錯誤,定位錯誤也比較容易,它的目的就是讓產品可以快速迭代,同時還能保證高質量。核心措施程式碼整合到主幹前,必須通過自動化測試。
GitLab CI
GitLab CI是為GitLab提供持續整合服務的一整套系統。在GitLab8.0以後的版本是預設整合了GitLab-CI並且預設啟用的。 使用GitLab CI需要在倉庫跟目錄建立一個gitlab-ci.yml的檔案,它用來指定持續整合需要執行的環境,以及要執行的指令碼。還需要設定一個gitlab-runner,當有程式碼push變更的時候,gitlab-runner會自動開始pipeline,並在gitlab上顯示持續整合的結果。
GitLab Runner
GitLab Runner是使用Go語言編寫的,可以做為一個二進位制檔案執行,不需要特定的語言要求,他建立了一個持續整合的的環境,所需要的程式使用Docker來安裝,配置好GitLab Runner執行的環境。GitLab Runner實際上都是docker container,由GitLab Runner來自動建立,執行的環境由GitLab Runner程式控制,使用docker來建立runner,使得每一個虛擬環境都乾淨,輕量,相互隔離,互不影響。 GitLab-Runner一般都是配合GitLab-CI使用的,在GitLab裡面定義一個屬於這個工程的軟體整合指令碼,用來自動化地完成一些軟體整合工作。 GitLab-Runner執行情況如下:
- 原生程式碼改動
- 變動程式碼推送到GitLab上
- GitLab 將這個變動通知GitLab-CI
- GitLab-CI找出這個工程相關聯的gitlab-runner
- gitlab-runner把程式碼更新到本地
- 根據預設定的條件配置好環境
- 根據預定義的指令碼(一般是.gitlab-ci.yml)執行
- 把執行結果通知給GitLab
- GitLab顯示最終執行的結果
gitlab-runner可以在不同的主機上部署,也可以在同一個主機上設定多個gitlab-runner ,還可以根據不同的環境設定不同的環境,比如我們需要區分研發環境,測試環境以及正式環境等。