原文鏈接:https://docs.gitlab.com/ee/ci/yaml/
在一個項目中,GitLab CI/CD 流水線通過使用名為 .gitlab-ci.yml 的 YAML 格式文件進行配置。
.gitlab-ci.yml 文件定義了流水線的文件結(jié)構(gòu)和執(zhí)行順序,并確定:
- 使用 GitLab Runner 執(zhí)行什么。
- 遇到特定條件時要做出哪些決定。例如,當(dāng)進程成功或失敗時。
本主題介紹 CI/CD 流水線配置。有關(guān)其他 CI/CD 配置信息,請參閱:
- GitLab CI/CD Variables,用于配置流水線運行的環(huán)境。
- GitLab Runner advanced configuration,用于配置 GitLab Runner。
我們也提供配置流水線的完整示例:
- 有關(guān) GitLab CI 的快速介紹,請按照我們的快速入門指南進行操作。
- 有關(guān)示例的集合,請查看 GitLab CI/CD Examples。
- 查看企業(yè)中使用的大型
.gitlab-ci.yml文件,請查看.gitlab-ci.ymlfile forgitlab-ce。
注意:如果您有一個從 GitLab 拉取過來的鏡像存儲庫,您可能需要在項目的 Settings > Repository > Pull from a remote repository > Trigger pipelines for mirror updates 以啟用并觸發(fā)流水線。
介紹
流水線的配置從作業(yè)開始。作業(yè)是 .gitlab-ci.yml 文件中最基本的元素。
作業(yè)是:
- 定義它們應(yīng)在什么條件下執(zhí)行的約束。
- 具有任意名稱的頂級元素,并且必須至少包含
script項。 - 不限制可以定義的作業(yè)數(shù)量。
例如:
job1:
script: "execute-script-for-job1"
job2:
script: "execute-script-for-job2"
上面的示例是最簡單的 CI/CD 配置,包含兩個單獨的作業(yè),其中每個作業(yè)執(zhí)行不同的命令。當(dāng)然,命令可以直接執(zhí)行代碼(./configure;make;make install)或者運行位于存儲庫中的腳本文件(test.sh)。
作業(yè)會被 Runner 選中并在 Runner 的所在的環(huán)境中執(zhí)行。重要的是,每項作業(yè)都是相互獨立運作的。
驗證 .gitlab-ci.yml 文件
GitLab CI 的每個實例都有一個名為 Lint 的嵌入式調(diào)試工具,它可以驗證 .gitlab-ci.yml 文件的內(nèi)容。您可以在項目命名空間的 ci/lint 頁面下找到 Lint。例如,https://gitlab.example.com/gitlab-org/project-123/-/ci/lint。
不可用的作業(yè)名稱
每個作業(yè)都必須具有一個唯一的名稱,但有一些保留的關(guān)鍵字不能用于作業(yè)名稱:
imageservicesstagestypesbefore_scriptafter_scriptvariablescache
使用保留關(guān)鍵字
如果在使用特定值時遇到驗證錯誤(例如,true 或 false),請嘗試:
- 引用他們。
- 將它們更改為其他形式,例如,
/bin/true。
配置參數(shù)
作業(yè)是通過一系列用于定義作業(yè)行為的參數(shù)來組成的。
下表列出了作業(yè)的可用參數(shù):
| 關(guān)鍵字 | 描述 |
|---|---|
script |
由 Runner 執(zhí)行的 Shell 腳本。 |
image |
使用 docker 鏡像。以下這些也可用:image:name 和 image:entrypoint
|
services |
使用 docker 服務(wù)鏡像。以下這些也可用:services:name 、services:alias、services:entrypoint 和 services:command
|
before_script |
包括一組在作業(yè)被執(zhí)行之前執(zhí)行的命令 |
after_script |
包括一組在作業(yè)被執(zhí)行之后執(zhí)行的命令 |
stages |
定義流水線中的階段 |
stage |
定義一個作業(yè)階段(默認(rèn):test) |
only |
創(chuàng)建作業(yè)的限制條件。以下這些也可用:only:refs, only:kubernetes, only:variables 和 only:changes
|
except |
不創(chuàng)建作業(yè)的限制條件。以下這些也可用:except:refs, except:kubernetes, except:variables 和 except:changes
|
tags |
用于選擇 Runner 的標(biāo)簽列表。 |
allow_failure |
允許作業(yè)執(zhí)行失敗。失敗的作業(yè)無助于提交狀態(tài) |
when |
什么時候執(zhí)行作業(yè)。以下這些也可用:when:manual 和 when:delayed
|
environment |
作業(yè)被部署的環(huán)境的名稱。以下這些也可用:environment:name, environment:url, environment:on_stop 和 environment:action
|
cache |
用于后續(xù)運行的緩存文件列表。以下這些也可用:cache:paths, cache:key, cache:untracked 和 cache:policy
|
artifacts |
成功附加到作業(yè)中的文件和目錄列表。以下這些也可用:artifacts:paths, artifacts:name, artifacts:untracked, artifacts:when, artifacts:expire_in, artifacts:reports 和 artifacts:reports:junit 在 企業(yè)版 GitLab 中,這些是可用的: artifacts:reports:codequality, artifacts:reports:sast, artifacts:reports:dependency_scanning, artifacts:reports:container_scanning, artifacts:reports:dast, artifacts:reports:license_management, artifacts:reports:performance 和 artifacts:reports:metrics
|
dependencies |
作業(yè)被執(zhí)行時所要依賴的其他作業(yè),以便您可以在它們之間傳遞 artifacts。 |
coverage |
設(shè)置給定作業(yè)執(zhí)行時的代碼覆蓋率要求 |
retry |
在發(fā)生故障時,自動重試作業(yè)的次數(shù)和時機 |
parallel |
應(yīng)該并行運行多少個作業(yè)實例 |
trigger |
定義下游流水線觸發(fā)器。 |
include |
允許此作業(yè)包含外部 YAML 文件。以下這些也可用:include:local, include:file, include:template 和 include:remote
|
extends |
此作業(yè)將繼承的配置條目 |
pages |
上傳作業(yè)執(zhí)行的結(jié)果以用于 GitLab Pages。 |
variables |
在作業(yè)級別中定義的作業(yè)變量 |
注意:參數(shù)
types和type已失效。
設(shè)置默認(rèn)參數(shù)
使用 default: 關(guān)鍵字可以將某些參數(shù)全局設(shè)置為所有作業(yè)都可用的默認(rèn)值。特定于作業(yè)中的相同參數(shù)配置可以覆蓋默認(rèn)參數(shù)。
可以在 default: 塊中定義以下作業(yè)參數(shù):
imageservicesbefore_scriptafter_scriptcache
在以下示例中,ruby:2.5 鏡像被設(shè)置為除 rspec 2.6 作業(yè)(該作業(yè)使用ruby:2.6 映像)之外的所有作業(yè)的默認(rèn)鏡像。
default:
image: ruby:2.5
rspec:
script: bundle exec rspec
rspec 2.6:
image: ruby:2.6
script: bundle exec rspec
參數(shù)詳情
以下是用于配置 CI/CD 流水線的參數(shù)的詳細說明。
...