GitLab CI持續整合-GitLab Runner

姜家志發表於2019-03-17

GitLab CI是開源的持續整合服務,GitLab Runner是一個開源專案,用於運作任務,並把結果傳送回GitLab,它與GitLab CI一起使用。

持續整合

持續(Continuous integration ,縮寫CI)是一種軟體工程流程,是將所有軟體工程師對於軟體的工作副本持續整合到共享主線(mainline)的一種舉措。該名稱最早由Grady Booch 在他的布區方法中提出,不過他並不支援在一天中進行數次整合。之後舉措成為極限程式設計驅動開發(TDD)的作法中,通常還會搭配自動單元測試。持續整合的提出主要是為解決軟體進行系統整合時面臨的各項問題。-維基百科

持續整合一般包括一些流程:

合併程式碼 安裝依賴 編譯 測試 釋出

持續整合必須依靠以下原則:

  • 維護一個程式碼知識庫
  • 自動構建,通過一個單一指令來達成系統建構
  • 一旦程式碼更改好,下一個階段應該要進行所有的測試,以確保軟體開發的成果匹配預期
  • 減少衝突,一天至少提交一次
  • 每次變更必須要快速完成,如此一來便可以避免整合問題
  • 儘可能的縮小測試環境和正式環境的差距,服務虛擬化通常更容易實現這個目標
  • 儘早整合
  • 任何人都可以檢視最後的建構的結果
  • 自動部署

持續整合可以快速發現錯誤,定位錯誤也比較容易,它的目的就是讓產品可以快速迭代,同時還能保證高質量。核心措施程式碼整合到主幹前,必須通過自動化測試。

GitLab CI

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執行情況如下:

執行時序圖

  1. 原生程式碼改動
  2. 變動程式碼推送到GitLab上
  3. GitLab 將這個變動通知GitLab-CI
  4. GitLab-CI找出這個工程相關聯的gitlab-runner
  5. gitlab-runner把程式碼更新到本地
  6. 根據預設定的條件配置好環境
  7. 根據預定義的指令碼(一般是.gitlab-ci.yml)執行
  8. 把執行結果通知給GitLab
  9. GitLab顯示最終執行的結果

gitlab-runner可以在不同的主機上部署,也可以在同一個主機上設定多個gitlab-runner ,還可以根據不同的環境設定不同的環境,比如我們需要區分研發環境,測試環境以及正式環境等。

相關文章