GitLab CI/CD快速入門
GitLab提供持續整合服務。如果新增一個.gitlab-ci.yml檔案到專案根目錄,並配置GitLab專案使用某個Runner,然後每一次提交或者是推送都會觸發CI pipeline.
.gitlab-ci.yml檔案會告訴GitLab Runner 做什麼。預設情況下,它執行一個pipeline,分為三個階段:build,test,deploy。你並不需要用到所有的階段,沒有job的階段會被忽略。
如果一切執行正常(沒有非零的返回值),您將得到與commit關聯的漂亮的綠色標記。這使得在檢視程式碼之前,很容易就能看出是否有一個提交導致了測試失敗。
大多數專案使用GitLab CI服務來執行測試套件,這樣如果開發人員發現問題就會及時得到反饋。
因此,簡而言之,CI所需要的步驟可以歸結為:
1. 新增.gitlab-ci.yml到專案的根目錄
2. 配置一個Runner
從此刻開始,在每一次push到Git倉庫的過程中,Runner會自動開啟pipline,pipline將顯示在專案的Pipline頁面中。
本指南要求:
使用版本8.0+ 的GitLab例項或者是使用GitLab.com一個想使用GitLab CI的專案
讓我們把它分解成碎片,並致力於解決GitLab CI之謎。
建立.gitlab-ci.yml
在建立.gitlab-ci.yml之前,我們先對它進行個簡單的解釋。
.gitlab-ci.yml是什麼
.gitlab-ci.yml是用來配置CI在我們的專案中做些什麼工作。它位於專案的根目錄。
在任何的push操作,GitLab都會尋找.gitlab-ci.yml檔案,並對此次commit開始jobs,jobs的內容來源於.gitlab-ci.yml檔案。
因為.gitlab-ci.yml是存在於我們的專案倉庫中,並且受版本控制的,所以舊版本也可以執行成功,且使用CI可以讓forks更容易,分支可也以擁有不同的pipelines和jobs,而且對於CI來說只會擁有單一的來源。你也可以在我們的部落格中找到我們為什麼使用.gitlab-ci.yml的原因。
建立一個簡單的.gitlab-ci.yml
注意:.gitlab-ci.yml是一個*&####&*_10_*&####&*檔案,所以必須要格外注意鎖緊。使用空格,而不是tabs。
在專案的根目錄建立一個名為.gitlab-ci.yml的檔案。下面是一個Ruby on Rails專案的示例。
before_:
-apt-get update-qq&&apt-get install-y-qq sqlite3 libsqlite3-dev nodejs
-ruby-v
-which ruby
-gem install bundler--no-ri--no-rdoc
-bundle install--jobs$(nproc)"${FLAGS[@]}"
rspec:
:
-bundle exec rspec
rubocop:
:
-bundle exec rubocop
這是大多數Ruby應用程式最簡單的配置:
定義了兩個jobs,rspec和rubocop(名字可以隨便取),他們執行不同的命令。在每個jobs之前,before_定義的命令都將會被執行。
.gitlab-ci.yml定義了一系列的jobs,其中包含如何執行和何時執行的限制。jobs必須定義一個名稱(在示例中分別是rspec和rubocop)作為頂級元素,而且總是必須包含關鍵字。Jobs被用來建立任務,它們會被Runners接受和環境中的Runner執行。
重要的是,每個工作都是獨立執行的。
如果你想檢驗.gitlab-ci.yml檔案的語法是否正確,在GitLab例項頁面中有一個命令列工具/ci/lint。也可以從專案中的CI/CD ➔ Pipelines and Pipelines ➔ Jobs找到此頁面。
關於更多.gitlab-ci.yml的資訊和語法,請閱讀.gitlab-ci.yml參考文件。
推送.gitlab-ci.yml到GitLab
一旦建立了.gitlab-ci.yml,你應該及時新增到Git倉庫並推送到GitLab。
1
2
3
git add.gitlab-ci.yml
git commit-m"Add .gitlab-ci.yml"
git push origin master
現在到Pipelines頁面檢視,將會看到該Pipline處於等待狀態。
你也可以到Commits頁面檢視,並會發現SHA旁邊的暫停按鈕。
點選它即可進入到該特定commit的jobs頁面。
配置Runner
在GitLab中,Runners將會執行你在.gitlab-ci.yml中定義的jobs。Runner可以是虛擬機器,VPS,裸機,docker容器,甚至一堆容器。GitLab和Runners通過API通訊,所以唯一的要求就是執行Runners的機器可以聯網。
一個Runner可以服務GitLab中的某個特定的專案或者是多個專案。如果它服務所有的專案,則被稱為共享的Runner。
在Runners文件中查閱更多關於不同Runners的資訊。
你可以通過Settings->CI/CD查詢是否有Runners分配到你的專案中。建立一個Runner是簡單且直接的。官方支援的Runner是用GO語言寫的,它的文件在這裡https://docs.gitlab.com/runner/。
為了有一個功能性的Runner,你需要遵循以下步驟:
安裝配置
按照上面的連線設定你自己的Runner或者使用下一節介紹的共享Runner。
一旦Runner安裝好,你可以從專案的Settings->CI/CD找到Runner頁面。
共享Runners
如果你用的是GitLab.com,你可以使用GitLab公司提供的共享Runners。
這些是執行在GitLab基礎設定上面的特殊虛擬機器,可以構建任何專案。
你可以通過專案中的Settings->CI/CD找到Shared Runners,並點選開啟它。
閱讀更多關於共享Runners。
檢視pipeline和jobs的狀態
成功的配置好Runner後,你應該檢視最後一次提交後的狀態,從pending、到執行中、成功或失敗。
你可以通過專案中的Piplines頁面檢視所有的piplines。
也可以通過Piplines->Jobs頁面檢視所有的jobs。
通過點選jobs的狀態,檢視該job的日誌。這對於幫助診斷job失敗或者job與預期結果不同很重要。
你還可以檢視在GitLab的各種頁面中的任何提交狀態,例如Commits和Merge requests。
例項