流水線是持續(xù)集成、交付和部署的頂級(jí)組件。
流水線包括:
- 工作,定義做什么。例如,編譯或測(cè)試代碼的作業(yè)。
- 階段,定義何時(shí)運(yùn)行作業(yè)。例如,在編譯代碼的階段之后運(yùn)行測(cè)試的階段。
作業(yè)由 runners 執(zhí)行。如果有足夠多的并發(fā)運(yùn)行程序,同一階段的多個(gè)作業(yè)將并行執(zhí)行。
如果一個(gè)階段中的所有作業(yè)成功,流水線將進(jìn)入下一個(gè)階段。
如果某個(gè)階段中的任何作業(yè)失敗,則下一個(gè)階段(通常)不會(huì)執(zhí)行并且流水線提前結(jié)束。
一般來說,流水線是自動(dòng)執(zhí)行的,一旦創(chuàng)建就不需要干預(yù)。但是,有時(shí)您也可以手動(dòng)與流水線交互。
一個(gè)典型的流水線可能包含四個(gè)階段,按以下順序執(zhí)行:
- 一個(gè)?
build
?階段,有一個(gè)名為?compile
?的作業(yè)。 - 一個(gè)?
test
?階段,有兩個(gè)名為?test1
?和?test2
?的作業(yè)。 - 一個(gè)?
staging
?階段,有一個(gè)名為?deploy-to-stage
?的作業(yè)。 - 一個(gè)
production
階段,有一個(gè)名為deploy-to-prod
的作業(yè)。
NOTE: 如果您有一個(gè)極狐GitLab 從中拉取的鏡像倉(cāng)庫(kù),您可能需要在項(xiàng)目的?設(shè)置 > 倉(cāng)庫(kù) > 鏡像倉(cāng)庫(kù) > 觸發(fā)鏡像更新的流水線。
流水線類型
流水線可以通過多種不同的方式進(jìn)行配置:
- 基本流水線?同時(shí)運(yùn)行每個(gè)階段的所有內(nèi)容,然后是下一個(gè)階段。
- 有向無環(huán)圖 (DAG) 流水線?基于作業(yè)之間的關(guān)系,可以比基本流水線運(yùn)行得更快。
- 多項(xiàng)目流水線?將不同項(xiàng)目的流水線組合在一起。
- 父子流水線?將復(fù)雜的流水線分解為一個(gè)可以觸發(fā)多個(gè)子流水線的父流水線,這些子流水線都運(yùn)行在同一個(gè)項(xiàng)目中并具有相同的 SHA。這種流水線架構(gòu)通常用于 mono-repos。
- 合并請(qǐng)求的流水線?僅針對(duì)合并請(qǐng)求運(yùn)行(而不是針對(duì)每次提交)。
- 合并結(jié)果的流水線?是來自源分支的更改已經(jīng)合并到目標(biāo)分支的合并請(qǐng)求流水線。
- 合并隊(duì)列?使用合并結(jié)果流水線將合并一個(gè)接一個(gè)地排隊(duì)
配置流水線
流水線及其組件作業(yè)和階段在每個(gè)項(xiàng)目的 CI/CD 流水線配置文件中定義。
- 作業(yè)是基本的配置組件。
- 階段是使用?stages?關(guān)鍵字定義的。
有關(guān) CI 流水線文件中的配置選項(xiàng)列表,請(qǐng)參閱?GitLab CI/CD 流水線配置參考。
您還可以通過 GitLab UI 配置流水線的特定方面。例如:
- 每個(gè)項(xiàng)目的流水線設(shè)置。
- 計(jì)劃流水線。
- 自定義 CI/CD 變量。
Ref specs for runners
當(dāng) runner 選擇流水線作業(yè)時(shí),系統(tǒng)會(huì)提供該作業(yè)的元數(shù)據(jù),包括?Git refspecs,指示哪個(gè)引用(分支、標(biāo)簽等)和提交(SHA1) 從您的項(xiàng)目倉(cāng)庫(kù)中檢出。
下表列出了為每種流水線類型注入的 refspecs:
流水線類型 | Refspecs |
---|---|
分支流水線 |
+<sha>:refs/pipelines/<id> ?和?+refs/heads/<name>:refs/remotes/origin/<name>
|
標(biāo)簽流水線 |
+<sha>:refs/pipelines/<id> ?和?+refs/tags/<name>:refs/tags/<name>
|
合并請(qǐng)求流水線 | +<sha>:refs/pipelines/<id> |
refs?refs/heads/<name>
?和?refs/tags/<name>
?存在于您的項(xiàng)目倉(cāng)庫(kù)中。極狐GitLab 在運(yùn)行流水線作業(yè)期間,生成特殊引用?refs/pipelines/<id>
。即使在刪除關(guān)聯(lián)的分支或標(biāo)記后,也可以創(chuàng)建此引用。因此,它在某些功能中很有用,例如自動(dòng)停止環(huán)境和可能運(yùn)行流水線的合并隊(duì)列分支刪除后。
查看流水線
您可以在項(xiàng)目的?CI/CD > 流水線?頁(yè)面下找到當(dāng)前和歷史流水線運(yùn)行。您還可以通過導(dǎo)航到其?流水線?選項(xiàng)卡來訪問合并請(qǐng)求的流水線。
?文章來源地址http://www.zghlxwxcb.cn/news/detail-498663.html
單擊流水線以打開?流水線詳細(xì)信息?頁(yè)面并顯示為該流水線運(yùn)行的作業(yè)。從這里您可以取消正在運(yùn)行的流水線、在失敗的流水線上重試作業(yè),或刪除流水線。
從 12.3 版本開始,/project/pipelines/[branch]/latest
?提供了指向給定分支最后一次提交的最新流水線的鏈接。 此外,/project/pipelines/latest
?將您重定向到項(xiàng)目默認(rèn)分支上最后一次提交的最新流水線。
從 13.0 版本開始,您可以通過以下方式過濾流水線列表:
- 觸發(fā)器作者
- 分支名稱
- 狀態(tài)(13.1 及更高版本)
- 標(biāo)簽(13.1 及更高版本)
- 源(14.3 及更高版本)
從 14.2 版本開始,可以更改流水線列以顯示流水線 ID 或流水線 IID。
如果您使用 VS Code 編輯您的 GitLab CI/CD 配置, GitLab Workflow VS Code 擴(kuò)展幫助您驗(yàn)證您的配置并查看您的流水線狀態(tài)。
手動(dòng)運(yùn)行流水線
可以使用預(yù)定義或手動(dòng)指定的變量手動(dòng)執(zhí)行流水線。
如果在流水線的正常操作之外需要流水線的結(jié)果(例如,代碼構(gòu)建),您可能會(huì)這樣做。
要手動(dòng)執(zhí)行流水線:
- 在頂部欄上,選擇?菜單 > 項(xiàng)目?并找到您的項(xiàng)目。
- 在左側(cè)邊欄上,選擇?CI/CD > 流水線。
- 選擇?運(yùn)行流水線。
- 在?為分支名稱或標(biāo)簽運(yùn)行?字段中,選擇要為其運(yùn)行流水線的分支或標(biāo)簽。
- 輸入流水線運(yùn)行所需的任何環(huán)境變量。您可以設(shè)置特定變量以使其值在表單中預(yù)填充。
- 選擇?運(yùn)行流水線。
流水線現(xiàn)在按照配置執(zhí)行作業(yè)。
手動(dòng)流水線中的預(yù)填充變量
引入于 13.7 版本
您可以使用?value
?和?description
?關(guān)鍵字來定義在手動(dòng)運(yùn)行流水線時(shí),預(yù)填充的流水線級(jí)(全局)變量。
在手動(dòng)觸發(fā)的流水線中,運(yùn)行流水線?頁(yè)面顯示所有頂級(jí)變量,以及?.gitlab-ci.yml
?文件中定義的?description
?和?value
。然后可以根據(jù)需要修改這些值,這會(huì)覆蓋該單個(gè)流水線運(yùn)行的值。
說明顯示在變量下方。它可以用來解釋變量的用途,可接受的值是什么,等等:
variables:
DEPLOY_ENVIRONMENT:
value: "staging" # Deploy to staging by default
description: "The deployment target. Change this variable to 'canary' or 'production' if needed."
當(dāng)您手動(dòng)運(yùn)行流水線時(shí),您無法將作業(yè)級(jí)變量設(shè)置為預(yù)填充。
使用 URL 查詢字符串運(yùn)行流水線
您可以使用查詢字符串預(yù)填充?運(yùn)行流水線?頁(yè)面。例如,查詢字符串?.../pipelines/new?ref=my_branch&var[foo]=bar&file_var[file_foo]=file_bar
?預(yù)先填充?運(yùn)行流水線?頁(yè)面:
-
運(yùn)行字段:
my_branch
。 -
變量部分:
- 變量:
- 鍵:
foo
- 值:
bar
- 鍵:
- 文件:
- 鍵:
file_foo
- 值:
file_bar
- 鍵:
- 變量:
pipelines/new
?URL 的格式為:
.../pipelines/new?ref=<branch>&var[<variable_key>]=<value>&file_var[<file_key>]=<value>
支持以下參數(shù):
-
ref
:指定用于填充?運(yùn)行?字段的分支。 -
var
:指定一個(gè)?Variable
?變量。 -
file_var
:指定一個(gè)?File
?變量。
對(duì)于每個(gè)?var
?或?file_var
,都需要一個(gè)鍵和值。
向您的流水線添加手動(dòng)交互
手動(dòng)作業(yè)允許您在推進(jìn)流水線之前需要手動(dòng)交互。
您可以直接從流水線圖中執(zhí)行此操作。只需單擊運(yùn)行按鈕即可執(zhí)行該特定作業(yè)。
例如,您的流水線可以自動(dòng)啟動(dòng),但需要手動(dòng)操作才能部署到生產(chǎn)。 在下面的示例中,production
?階段有一個(gè)帶有手動(dòng)操作的作業(yè):
?
在一個(gè)階段啟動(dòng)多個(gè)手動(dòng)操作
可以使用“全部手動(dòng)運(yùn)行”按鈕同時(shí)啟動(dòng)單個(gè)階段中的多個(gè)手動(dòng)操作。 單擊此按鈕后,將觸發(fā)每個(gè)單獨(dú)的手動(dòng)操作并刷新為更新狀態(tài)。
此功能僅適用于:
- 對(duì)于至少具有開發(fā)人員角色的用戶。
- 如果階段包含手動(dòng)操作。
跳過流水線
要在不觸發(fā)流水線的情況下推送提交,請(qǐng)使用任何大寫形式在提交消息中添加?[ci skip]
?或?[skip ci]
。
或者,如果您使用的是 Git 2.10 或更高版本,請(qǐng)使用?ci.skip
?Git 推送選項(xiàng)。?ci.skip
?推送選項(xiàng)不會(huì)跳過合并請(qǐng)求流水線。
刪除流水線
項(xiàng)目中具有所有者角色 的用戶可以通過點(diǎn)擊?CI/CD > 流水線?中的流水線到達(dá)?流水線詳情?頁(yè)面,然后使用?刪除?按鈕。
?
刪除流水線不會(huì)自動(dòng)刪除其子流水線。
WARNING: 刪除流水線會(huì)使所有流水線緩存過期,并立即刪除所有相關(guān)對(duì)象,例如構(gòu)建、日志、產(chǎn)物和觸發(fā)器。此操作無法撤消。
流水線配額
每個(gè)用戶都有個(gè)人流水線配額,用于跟蹤所有個(gè)人項(xiàng)目中共享 runner 的使用情況。 每個(gè)群組都有一個(gè)使用配額,用于跟蹤群組內(nèi)創(chuàng)建的所有項(xiàng)目的共享 runner 的使用情況。
當(dāng)流水線被觸發(fā)時(shí),無論是誰觸發(fā)的,都會(huì)使用項(xiàng)目所有者的命名空間的流水線配額。在這種情況下,命名空間可以是擁有項(xiàng)目的用戶或群組。
如何計(jì)算流水線持續(xù)時(shí)間
給定管道的總運(yùn)行時(shí)間不包括重試和掛起(排隊(duì))時(shí)間。
每個(gè)作業(yè)都表示為一個(gè)?Period
,它包括:
-
Period#first
(作業(yè)開始時(shí))。 -
Period#last
(當(dāng)工作完成時(shí))。
一個(gè)簡(jiǎn)單的例子是:
- A (1, 3)
- B (2, 4)
- C (6, 7)
在示例中:
- A 從 1 開始,到 3 結(jié)束。
- B 從 2 開始,到 4 結(jié)束。
- C 從 6 點(diǎn)開始,到 7 點(diǎn)結(jié)束。
它可以被視為:
0 1 2 3 4 5 6 7
AAAAAAA
BBBBBBB
CCCC
A、B 和 C 的并集是 (1, 4) 和 (6, 7)。 因此,總運(yùn)行時(shí)間為:
(4 - 1) + (7 - 6) => 4
如何計(jì)算流水線配額使用量
管道配額使用量計(jì)算為每個(gè)單獨(dú)作業(yè)的持續(xù)時(shí)間總和。這與管道持續(xù)時(shí)間計(jì)算的方式略有不同。流水線配額使用不考慮并行運(yùn)行的作業(yè)的任何重疊。
例如,流水線由以下作業(yè)組成:
- 作業(yè) A 需要 3 分鐘。
- 作業(yè) B 需要 3 分鐘。
- 作業(yè) C 需要 2 分鐘。
流水線配額使用量是每個(gè)作業(yè)持續(xù)時(shí)間的總和。在此示例中,將使用 8 分鐘 runner,計(jì)算公式為:3 + 3 + 2。
受保護(hù)分支上的流水線安全
在受保護(hù)分支上執(zhí)行流水線時(shí),會(huì)強(qiáng)制執(zhí)行嚴(yán)格的安全模型。
僅當(dāng)用戶在該特定分支上允許合并或推送時(shí),才允許在受保護(hù)分支上執(zhí)行以下操作:
- 運(yùn)行手動(dòng)流水線(使用?Web UI?或流水線 API)。
- 運(yùn)行計(jì)劃流水線。
- 使用觸發(fā)器運(yùn)行流水線。
- 運(yùn)行按需 DAST 掃描。
- 在現(xiàn)有流水線上觸發(fā)手動(dòng)操作。
- 重試或取消現(xiàn)有作業(yè)(使用 Web UI 或流水線 API)。
標(biāo)記為?受保護(hù)?的?變量?只能由在受保護(hù)分支上運(yùn)行的作業(yè)訪問,防止不受信任的用戶意外訪問敏感信息,如部署憑據(jù)和令牌。
標(biāo)記為?受保護(hù)?的?Runners?只能在受保護(hù)的分支上運(yùn)行作業(yè),防止不受信任的代碼在受保護(hù)的 runner 上執(zhí)行,并保護(hù)部署密鑰和其他憑據(jù)不被無意訪問。為了確保要在受保護(hù) runner 上執(zhí)行的作業(yè)不使用常規(guī) runner,必須相應(yīng)地標(biāo)記它們。
可視化流水線
流水線可以是具有許多順序和并行作業(yè)的復(fù)雜結(jié)構(gòu)。
為了更容易理解流水線的流程,極狐GitLab 提供了用于查看流水線及其狀態(tài)的流水線圖。
流水線圖可以顯示為大圖或迷你圖,具體取決于您訪問該圖的頁(yè)面。
流水線圖中,階段的名稱大寫。
查看完整的流水線圖
- 可視化改進(jìn)引入于 13.11 版本
流水線詳細(xì)信息頁(yè)面顯示流水線中所有作業(yè)的完整流水線圖。
您可以按以下方式對(duì)作業(yè)進(jìn)行分組:
-
階段,將同一階段的作業(yè)一起排列在同一列中:
-
?
-
作業(yè)依賴項(xiàng),根據(jù)作業(yè)的?needs?依賴項(xiàng)來安排作業(yè)。
多項(xiàng)目流水線圖?幫助您可視化整個(gè)流水線,包括所有跨項(xiàng)目的相互依賴。?(PREMIUM)
如果一個(gè)階段包含超過 100 個(gè)作業(yè),則流水線圖中僅列出前 100 個(gè)作業(yè)。其余作業(yè)仍然正常運(yùn)行。要查看作業(yè):
- 選擇流水線,在流水線詳情頁(yè)面右側(cè)列出作業(yè)。
- 在左側(cè)邊欄上,選擇?CI/CD > 作業(yè)。
在流水線圖中查看作業(yè)依賴關(guān)系
- 引入于 13.12 版本。
- 默認(rèn)其用于 14.0 版本。
- 功能標(biāo)志移除于 14.2 版本。
您可以根據(jù)作業(yè)的?needs?依賴關(guān)系在流水線圖中排列作業(yè)。
最左側(cè)列中的作業(yè)首先運(yùn)行,依賴它們的作業(yè)分組在下一列中。
例如,test-job1
?僅依賴于第一列中的作業(yè),因此它顯示在左起第二列中。deploy-job1
?依賴于第一列和第二列中的作業(yè),并顯示在第三列中:
?
要添加顯示作業(yè)之間?needs
?關(guān)系的行,請(qǐng)選擇?查看依賴項(xiàng)?開關(guān)。
?
要查看作業(yè)的完整?needs
?依賴關(guān)系樹,請(qǐng)將鼠標(biāo)懸停在其上:
?
流水線迷你圖
流水線迷你圖占用的空間更少,并且可以快速告訴您所有作業(yè)是否通過或失敗。當(dāng)您轉(zhuǎn)到以下位置時(shí),可以找到流水線迷你圖:
- 流水線索引頁(yè)面。
- 單個(gè)提交頁(yè)面。
- 合并請(qǐng)求頁(yè)面。
- 流水線編輯器(14.5 及更高版本)。
流水線迷你圖允許您查看單個(gè)提交的所有相關(guān)作業(yè)以及流水線每個(gè)階段的最終結(jié)果。這使您可以快速查看失敗的內(nèi)容并進(jìn)行修復(fù)。
流水線迷你圖僅按階段顯示作業(yè)。
流水線迷你圖中的階段是可展開的。將鼠標(biāo)懸停在他們上方并單擊以展開他們的作業(yè)。
?
?
流水線徽章
流水線狀態(tài)和測(cè)試覆蓋率報(bào)告徽章可用于每個(gè)項(xiàng)目并可配置。 有關(guān)向項(xiàng)目添加流水線徽章的信息,請(qǐng)參閱流水線徽章。
下游流水線
在流水線圖表視圖中,下游流水線(多項(xiàng)目流水線和父子流水線顯示在圖表右側(cè)的卡片列表。
在圖表視圖中取消或重試下游流水線
- 從圖表視圖中取消或重試下游流水線功能引入于 15.0 版本,功能標(biāo)志名為?
downstream_retry_action
。默認(rèn)禁用。- 一般可用,且功能標(biāo)志刪除于 15.1 版本。
要取消仍在運(yùn)行的下游流水線,請(qǐng)選擇流水線卡片上的?取消?({cancel})。
要重試失敗的下游流水線,請(qǐng)選擇流水線卡片上的?重試?({retry})。
文章來源:http://www.zghlxwxcb.cn/news/detail-498663.html
?
到了這里,關(guān)于CI/CD 流水線 (FREE)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!