原文鏈接:https://gitlab.com/help/ci/quick_start/README
開始使用 GitLab CI/CD
注意:從 8.0 版本開始,GitLab 持續(xù)集成(CI)完全集成到 GitLab 中,并在所有項(xiàng)目中默認(rèn)啟用。
注意:請(qǐng)記住,只有項(xiàng)目維護(hù)者和管理員才有權(quán)訪問(wèn)項(xiàng)目的設(shè)置。
注意:從 Jenkins 轉(zhuǎn)到 GitLab?查看將您已有的 pipelines 轉(zhuǎn)換為我們的格式的參考。
GitLab 提供持續(xù)集成服務(wù)。如果你將 .gitlab-ci.yml 文件添加到存儲(chǔ)庫(kù)的根目錄下,并將 GitLab 項(xiàng)目配置為使用 Runner,則每次提交或推送都會(huì)觸發(fā) CI pipelines(注:pipelines 官方譯為“流水線”,本文中亦以此稱之)。
.gitlab-ci.yml 文件告訴 GitLab runner 該做什么。默認(rèn)情況下,它運(yùn)行一個(gè)包含三個(gè) stages(階段) 的流水線:build、test 和 deploy。你不需要使用所有這三個(gè) stage;沒有作業(yè)的 stage 會(huì)被忽略。
如果一切運(yùn)行正常(沒有非零返回值),你會(huì)看到一個(gè)與提交相關(guān)的漂亮的綠色復(fù)選標(biāo)記 ?。這樣你可以在查看代碼之前,輕松查看提交是否導(dǎo)致任何測(cè)試失敗問(wèn)題。
大多數(shù)項(xiàng)目使用 GitLab 的 CI 服務(wù)來(lái)運(yùn)行測(cè)試套件,以便開發(fā)人員在修改某些內(nèi)容時(shí)立即獲得反饋。
使用持續(xù)交付和持續(xù)部署將測(cè)試代碼自動(dòng)部署到測(cè)試和生產(chǎn)環(huán)境的趨勢(shì)越來(lái)越明顯。
簡(jiǎn)而言之,實(shí)現(xiàn)一個(gè)可運(yùn)行的 CI 服務(wù)所需的步驟可歸納為:
- 將
.gitlab-ci.yml文件添加到存儲(chǔ)庫(kù)的根目錄下。 - 配置一個(gè) Runner。
自此,每次向你的 Git 存儲(chǔ)庫(kù)執(zhí)行 push 操作時(shí),Runner 將自動(dòng)啟動(dòng)流水線,流水線將顯示在項(xiàng)目的 Pipelines 頁(yè)面下。
本指南假設(shè)您擁有:
- 一個(gè)正在運(yùn)行的大于 8.0 版本的 GitLab 實(shí)例或正在使用 GitLab.com。
- 一個(gè)存儲(chǔ)在 GitLab 中的項(xiàng)目,并且您希望使用 CI 服務(wù)。
- 可以訪問(wèn)該項(xiàng)目的維護(hù)者或項(xiàng)目所有者。
讓我們分解它并努力解決 GitLab CI 難題。
創(chuàng)建一個(gè) .gitlab-ci.yml 文件
在創(chuàng)建 .gitlab-ci.yml 文件之前,讓我們先簡(jiǎn)要解釋一下這是什么。
什么是 .gitlab-ci.yml
您可以在 .gitlab-ci.yml 文件中配置 CI 對(duì)項(xiàng)目執(zhí)行的操作。該文件位于存儲(chǔ)庫(kù)的根目錄中。
當(dāng)向您的存儲(chǔ)庫(kù)執(zhí)行任何 push 操作時(shí),GitLab 將查找 .gitlab-ci.yml 文件,并根據(jù)該文件提交的內(nèi)容在 Runners 上啟動(dòng)一個(gè)作業(yè)。
因?yàn)?.gitlab-ci.yml 存儲(chǔ)在 Git 存儲(chǔ)庫(kù)中并且受版本控制,舊版本仍然可以成功構(gòu)建,分支可以輕松地使用 CI,分支可以具有不同的流水線和作業(yè),并且您有的單一可信的來(lái)源用于持續(xù)集成。您可以在我們的 博客 中詳細(xì)了解我們使用 .gitlab-ci.yml 的原因。
創(chuàng)建一個(gè)簡(jiǎn)單的 .gitlab-ci.yml 文件
注意:
.gitlab-ci.yml是一個(gè) YAML 格式的文件,因此您必須特別注意縮進(jìn)。始終使用空格,而不是制表符。
您需要在存儲(chǔ)庫(kù)的根目錄中創(chuàng)建名為 .gitlab-ci.yml 的文件。下面是 Ruby on Rails 項(xiàng)目的示例。
image: "ruby:2.5"
before_script:
- apt-get update -qq && apt-get install -y -qq sqlite3 libsqlite3-dev nodejs
- ruby -v
- which ruby
- gem install bundler --no-document
- bundle install --jobs $(nproc) "${FLAGS[@]}"
rspec:
script:
- bundle exec rspec
rubocop:
script:
- bundle exec rubocop
這是最簡(jiǎn)單的配置,適用于大多數(shù) Ruby 應(yīng)用程序:
- 定義兩個(gè)作業(yè)
rspec和rubocop(名稱是任意的)分別表示要執(zhí)行的兩種不同命令。 - 在每個(gè) job 作業(yè)被執(zhí)行之前,會(huì)先執(zhí)行
before_script中定義的命令。
.gitlab-ci.yml 文件定義了具有運(yùn)行方式和時(shí)間約束的作業(yè)集。作業(yè)被定義為具有名稱的頂級(jí)元素(在我們的示例中為 rspec 和 rubocop),并且始終必須包含 script 關(guān)鍵字。 Jobs 用于創(chuàng)建 jobs 作業(yè),然后由 Runners 選擇并在 Runner 的環(huán)境下執(zhí)行。
重要的是每項(xiàng) job 作業(yè)都是相互獨(dú)立運(yùn)作的。
如果要檢查項(xiàng)目中的 .gitlab-ci.yml 配置是否有效,則在項(xiàng)目命名空間的 /-/ci/lint 頁(yè)面下有一個(gè) Lint 工具。您還可以在你的項(xiàng)目的 CI/CD ? Pipelines 和 Pipelines ? Jobs 頁(yè)面下找到 “CI Lint” 按鈕。
有關(guān)更多信息和完整的.gitlab-ci.yml語(yǔ)法,請(qǐng)閱讀 GitLab CI/CD 管道配置參考文檔 。
將 .gitlab-ci.yml 推送到 GitLab
一旦你創(chuàng)建了 .gitlab-ci.yml 文件,你應(yīng)該將它添加到你的 Git 存儲(chǔ)庫(kù)并將其推送到 GitLab。
git add .gitlab-ci.yml
git commit -m "Add .gitlab-ci.yml"
git push origin master
現(xiàn)在,如果您轉(zhuǎn)到 “Pipelines(流水線)”頁(yè)面,您將看到 Pipelines 處于待處理狀態(tài)。
注意:如果您有一個(gè)來(lái)自 GitLab 的鏡像存儲(chǔ)庫(kù),您可能需要在項(xiàng)目的 Settings > Repository > Pull from a remote repository > Trigger pipelines for mirror updates 以啟用并觸發(fā)流水線。
您也可以轉(zhuǎn)到 “Commits” 頁(yè)面,注意提交 SHA 哈希值旁邊的小暫停圖標(biāo)。

點(diǎn)擊它,您將被重定向到該特定提交的 job 頁(yè)面。

請(qǐng)注意,有一個(gè)掛起的作業(yè)以我們?cè)?.gitlab-ci.yml 中寫的命名。橙色的標(biāo)識(shí) “stuck(卡?。北硎旧形礊榇俗鳂I(yè)配置 Runner。
配置 Runner
在 GitLab 中,Runners 運(yùn)行您在 .gitlab-ci.yml 中定義的作業(yè)。Runner 可以是虛擬機(jī),VPS,裸機(jī),docker 容器甚至是容器集群。GitLab 和 Runners 通過(guò) API 進(jìn)行通信。所以唯一的要求是部署 Runner 的機(jī)器可以訪問(wèn) GitLab 服務(wù)器。
Runner 可以特定于某個(gè)項(xiàng)目,也可以同時(shí)為 GitLab 中的多個(gè)項(xiàng)目提供服務(wù)。如果它服務(wù)于所有項(xiàng)目,則稱為 Shared Runner。
在 Runners 文檔中查找有關(guān)不同 Runners 的更多信息。
您可以通過(guò)轉(zhuǎn)到 Settings ? CI/CD 找到是否為您的項(xiàng)目分配了任何 Runner。設(shè)置一個(gè) Runner 既簡(jiǎn)單又直接。由 GitLab 支持的官方 Runner 是用 Go 語(yǔ)言編寫的,其文檔可以在 https://docs.gitlab.com/runner/ 中找到。
要獲得 Runner 功能,您需要執(zhí)行以下兩個(gè)步驟:
按照上面的鏈接設(shè)置您自己的 Runner 或使用 Shared Runner,如下一節(jié)所述。
設(shè)置好 Runner 后,您應(yīng)該在項(xiàng)目的 Settings ? CI/CD 中的 Runners 頁(yè)面上看到它。

共享 Runners
如果您使用 GitLab.com,您可以使用 GitLab Inc. 提供的共享 Runners。
這些是在 GitLab 的基礎(chǔ)架構(gòu)上運(yùn)行的特殊虛擬機(jī),可以構(gòu)建任何項(xiàng)目。
要啟用共享 Runners,您必須轉(zhuǎn)到項(xiàng)目的 Settings ? CI/CD,然后單擊 Enable shared runners。
查看流水線和作業(yè)的狀態(tài)
成功配置好 Runner 后,您應(yīng)該會(huì)看到上次提交的狀態(tài)從掛起更改為運(yùn)行、成功或失敗。您可以轉(zhuǎn)到項(xiàng)目的 “Pipelines” 頁(yè)面來(lái)查看所有的流水線。

或者您可以通過(guò) Pipelines ? Jobs 頁(yè)面查看所有的作業(yè)。

通過(guò)單擊作業(yè)的狀態(tài),您將能夠看到該作業(yè)的日志。這對(duì)于診斷工作失敗或行為與預(yù)期不同的原因非常重要。

您還可以在 GitLab 的各個(gè)頁(yè)面中查看任何提交的狀態(tài),例如 Commits 提交和 Merge requests 合并請(qǐng)求。