Skip to content

  • 体验新版
    • 正在加载...
  • 登录
  • GitCode
  • 帮助文档帮助文档
  • Wiki
    • Docs
    • Ci
  • yaml

帮助文档
帮助文档
  • 项目概览

GitCode / 帮助文档

通知 1805
Star 580
Fork 459
  • 代码
    • 文件
    • 提交
    • 分支
    • Tags
    • 贡献者
    • 分支图
    • Diff
  • Issue 44
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 1
  • DevOps
    • 流水线
    • 流水线任务
    • 计划
  • Wiki 89
    • Wiki
  • 分析
    • 仓库
    • DevOps
  • 代码片段
  • 项目成员
  • Pages
帮助文档
帮助文档
  • 项目概览
    • 项目概览
    • 详情
    • 发布
  • 仓库
    • 仓库
    • 文件
    • 提交
    • 分支
    • 标签
    • 贡献者
    • 分支图
    • 比较
  • Issue 44
    • Issue 44
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 1
    • 合并请求 1
  • Pages
  • DevOps
    • DevOps
    • 流水线
    • 流水线任务
    • 计划
  • 分析
    • 分析
    • 仓库分析
    • DevOps
  • Wiki 89
    • Wiki
  • 代码片段
    • 代码片段
  • 成员
    • 成员
  • 收起侧边栏
  • 动态
  • 分支图
  • 创建新Issue
  • 流水线任务
  • 提交
  • Issue看板
“f9ab2be2cd7788789f2b789c2bb18a589e09edc2”上不存在“git@gitcode.net:qq_21688871/mirrors-settings.git”

yaml · 变更

页面历史
yaml done 编写于 6月 09, 2021 作者: Miykael_xxm's avatar Miykael_xxm
显示空白变更内容
内联 并排
Showing with 774 addition and 1037 deletion
+774 -1037
  • docs/ci/yaml.md docs/ci/yaml.md +774 -1037
  • 未找到文件。
docs/ci/yaml.md
View page @ 9dc8aabf
...@@ -2783,1480 +2783,1223 @@ job1: ...@@ -2783,1480 +2783,1223 @@ job1:
coverage: '/Code coverage: \d+\.\d+/' coverage: '/Code coverage: \d+\.\d+/'
``` ```
如果流水线任务输出中至少有一行与正则表达式匹配,则覆盖率会显示在 UI 中。 当流水线任务输出中至少有一行与正则表达式匹配时,则覆盖率会显示在 UI 中。如果流水线任务输出中有多个匹配的行,则使用最后一行。对于匹配的行,第一次出现 `\d+(\.\d+)?` 是代码覆盖率。前面的空内容会被删除。
如果流水线任务输出中有多个匹配的行,则使用最后一行。
对于匹配的行,第一次出现 `\d+(\.\d+)?` 是代码覆盖率。
前导零被删除。
[子流水线](../parent_child_pipelines.md) 的覆盖率输出未记录 子流水线的覆盖率输出并未记录或显示
或显示。检查[相关问题](https://gitlab.com/gitlab-org/gitlab/-/issues/280818)
更多细节。
###`重试` ### `retry`[](#retry)
> [介绍](https://gitlab.com/gitlab-org/gitlab-runner/-/issues/3515) 在 GitLab 11.5 中,你可以控制重试哪些故障。 使用 `retry` 配置一个流水线任务失败时的重试次数。
使用 `retry` 配置一个流水线任务的重试次数 当一个流水线任务失败时,该流水线任务会被重新处理,直至达到由 `retry` 关键字指定限制的次数。
失败的情况。
当一个流水线任务失败时,该流水线任务被重新处理, 如果 `retry` 设置为 `2`,并且流水线任务在第二次运行(第一次重试)中成功,则不会再次重试。`retry` 值必须是一个正整数,从 `0` 到 `2`(最多重试两次,总共运行三次)。
直到达到由 `retry` 关键字指定的限制。
如果 `retry` 设置为 `2`,并且流水线任务在第二次运行(第一次重试)中成功,则不会重试。
`retry` 值必须是一个正整数,从 `0` 到 `2`
(最多重试两次,总共运行三次)。
以下示例重试所有失败情况: 以下示例重试所有失败情况:
```yaml ```yaml
测试: test:
脚本:rspec script: rspec
重试:2 retry: 2
`` ```
默认情况下,在所有失败情况下都会重试流水线任务。为了更好地控制 默认情况下,在所有失败情况下都会重试流水线任务。为了更好地控制重试失败,`retry` 可以是具有以下键的散列:
对于重试失败,“重试”可以是具有以下键的散列:
- `max`:最大重试次数。 - `max`:最大重试次数。
- `when`:要重试的失败案例。 - `when`:要重试的失败 case。
仅重试运行器系统故障最多两次: 当 Runner 系统故障时最多重试两次,你可以这样做:
```yaml ```yaml
测试: test:
脚本:rspec script: rspec
重试: retry:
最大:2 max: 2
时间:runner_system_failure when: runner_system_failure
`` ```
如果除了流道系统故障之外还有其他故障,流水线任务 如果除了 Runner 系统故障之外还有其他故障,流水线任务不会重试。
不重试。
要重试多个失败案例,`when` 也可以是一个失败数组: 要重试多个失败 cases,`when` 也可以是一个失败 cases 数组:
```yaml ```yaml
测试: test:
脚本:rspec script: rspec
重试: retry:
最大:2 max: 2
什么时候: when:
- runner_system_failure - runner_system_failure
- 卡住_or_timeout_failure - stuck_or_timeout_failure
`` ```
`when` 的可能值为: `when` 的可能值为:
<!--
如果你更改以下任何值,请确保更新 `RETRY_WHEN_IN_DOCUMENTATION`
`spec/lib/gitlab/ci/config/entry/retry_spec.rb` 中的数组。
那里的测试确保所有记录在案
值作为配置选项有效,因此应始终
与本文档保持同步。
-->
- `always`:在任何失败时重试(默认)。 - `always`:在任何失败时重试(默认)。
- `unknown_failure`:失败原因未知时重试。 - `unknown_failure`:失败原因未知时重试。
- `script_failure`:脚本失败时重试。 - `script_failure`:脚本失败时重试。
- `api_failure`:API 失败时重试。 - `api_failure`:API 失败时重试。
- `stuck_or_timeout_failure`:当流水线任务卡住或超时时重试。 - `stuck_or_timeout_failure`:当流水线任务卡住或超时时重试。
- `runner_system_failure`:如果存在运行器系统故障(例如,流水线任务设置失败),则重试。 - `runner_system_failure`:如果存在运行器系统故障(例如,流水线任务设置失败),则重试。
- `missing_dependency_failure`:如果缺少依赖项,请重试。 - `missing_dependency_failure`:如果缺少依赖项,则重试。
- `runner_unsupported`:如果跑步者不受支持,则重试。 - `runner_unsupported`:如果 Runner 不受支持,则重试。
- `stale_schedule`:如果无法执行延迟的流水线任务,请重试。 - `stale_schedule`:如果无法执行延迟的流水线任务,则重试。
- `job_execution_timeout`:如果脚本超过为流水线任务设置的最大执行时间,则重试。 - `job_execution_timeout`:如果脚本超过为流水线任务设置的最大执行时间,则重试。
- `archived_failure`:如果流水线任务已存档且无法运行,请重试。 - `archived_failure`:如果流水线任务已存档且无法运行,则重试。
- `unmet_prerequisites`:如果流水线任务未能完成先决任务,则重试。 - `unmet_prerequisites`:如果流水线任务未能完成先决任务,则重试。
- `scheduler_failure`:如果调度程序未能将流水线任务分配给运行程序,则重试。 - `scheduler_failure`:如果调度程序未能将流水线任务分配给运行程序,则重试。
- `data_integrity_failure`:如果检测到结构完整性问题,请重试。 - `data_integrity_failure`:如果检测到结构完整性问题,则重试。
你可以使用变量指定[特定流水线任务执行阶段的重试次数](../runners/README.md#job-stages-attempts)。 你可以使用变量指定[特定流水线任务执行阶段的重试次数](/docs/ci/runners#job-stages-attempts)。
###`超时` ### `timeout`[](#timeout)
> [介绍](https://gitlab.com/gitlab-org/gitlab/-/issues/14887) 在 GitLab 12.3 中。
使用 `timeout` 为特定流水线任务配置超时。例如: 使用 `timeout` 为特定流水线任务配置超时。例如:
```yaml ```yaml
建造: build:
脚本:build.sh script: build.sh
超时:3小时30分钟 timeout: 3 hours 30 minutes
测试:
脚本:rspec
超时时间:3h 30m
``
流水线任务级超时可以超过 test:
[项目级超时](../pipelines/settings.md#timeout) 但不能 script: rspec
超过跑步者特定的超时时间。 timeout: 3h 30m
```
###`平行` 流水线任务级超时可以超过[项目级超时时间](/docs/ci/pipelines/settings#timeout) ,但不能
超过 Runner 设置的超时时间。
> [介绍](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/21480) 在 GitLab 11.5 中。 ### `parallel`[](#parallel)
使用 `parallel` 配置要并行运行的流水线任务实例的数量。 使用 `parallel` 配置要并行运行的流水线任务实例的数量。该值可以是 2 到 50。
该值可以是 2 到 50。
`parallel` 关键字创建并行运行的同一流水线任务的 N 个实例。 `parallel` 关键字创建并行运行的同一流水线任务的 N 个实例。它们的命名顺序是从 `job_name 1/N` 到 `job_name N/N`:
它们的命名顺序是从 `job_name 1/N` 到 `job_name N/N`:
```yaml ```yaml
测试: test:
脚本:rspec script: rspec
平行:5 parallel: 5
`` ```
每个并行流水线任务都有一个“CI_NODE_INDEX”和“CI_NODE_TOTAL” 每个并行流水线任务都有一个 `CI_NODE_INDEX` 和 `CI_NODE_TOTAL` [预定义 CI/CD 变量](/docs/ci/variables#predefined-cicd-variables) 设置。
[预定义 CI/CD 变量](../variables/README.md#predefined-cicd-variables) 设置。
不同的语言和测试套件有不同的方法来实现并行化。 不同的语言和测试套件有不同的方法来实现并行。例如,使用 [Semaphore Test Boosters](https://github.com/renderedtext/test-boosters)和 RSpec 并行运行 Ruby 测试:
例如,使用 [Semaphore Test Boosters](https://github.com/renderedtext/test-boosters)
和 RSpec 并行运行 Ruby 测试:
```红宝石 ```ruby
# 宝石文件 # Gemfile
来源“https://rubygems.org” source 'https://rubygems.org'
宝石'rspec' gem 'rspec'
gem 'semaphore_test_boosters' gem 'semaphore_test_boosters'
`` ```
```yaml ```yaml
测试: test:
并行:3 parallel: 3
脚本: script:
- 捆 - bundle
- 捆绑执行 rspec_booster --job $CI_NODE_INDEX/$CI_NODE_TOTAL - bundle exec rspec_booster --job $CI_NODE_INDEX/$CI_NODE_TOTAL
`` ```
警告:
Test Boosters 向作者报告使用统计数据。
然后,你可以导航到新流水线构建的 **Jobs** 选项卡并查看你的 RSpec > 警告:
流水线任务分为三个独立的流水线任务。 >
> Test Boosters 会向其作者报告使用统计数据。
#### 并行`矩阵`流水线任务 然后,你可以导航到新流水线构建的 **流水线任务** 选项卡,这时你会发现 RSpec 的流水线任务已经分为三个独立的流水线任务。
> - [介绍](https://gitlab.com/gitlab-org/gitlab/-/issues/15356) 在 GitLab 13.3 中。 #### 并行 `matrix` 流水线任务
使用 `matrix:` 在单个流水线中并行运行流水线任务多次, 使用 `matrix:` 在单个流水线中并行运行流水线任务多次,但每个流水线任务实例都有不同的变量值。可以有 2 到 50 个流水线任务。
但每个流水线任务实例都有不同的变量值。
可以有 2 到 50 个流水线任务岗位。
流水线任务只有在有多个跑步者或单个跑步者时才能并行运行 流水线任务只有在有多个 Runner 或单个 Runner 被配置为同时运行多个流水线任务时才能并行运行。
[配置为同时运行多个流水线任务](#use-your-own-runners)。
每个流水线任务都获得相同的 `CI_NODE_TOTAL` [CI/CD 变量](../variables/README.md#predefined-cicd-variables) 值和唯一的 `CI_NODE_INDEX` 值。 每个流水线任务都获得相同的 `CI_NODE_TOTAL` [CI/CD 变量](/docs/ci/variables#predefined-cicd-variables) 值和唯一的 `CI_NODE_INDEX` 值。
```yaml ```yaml
部署堆栈: deploystacks:
阶段:部署 stage: deploy
脚本: script:
- 垃圾箱/部署 - bin/deploy
平行: parallel:
矩阵: matrix:
- 供应商:aws - PROVIDER: aws
堆: STACK:
- 监控 - monitoring
- 应用程序1 - app1
- 应用程序2 - app2
- 提供者:ovh - PROVIDER: ovh
堆栈:[监控、备份、应用程序] STACK: [monitoring, backup, app]
- 提供者:[gcp,vultr] - PROVIDER: [gcp, vultr]
堆栈:[数据,处理] STACK: [data, processing]
`` ```
以下示例生成 10 个并行的 `deploystacks` 流水线任务,每个流水线任务具有不同的值 上面的例子生成了 10 个并行的 `deploystacks` 流水线任务,对于 `PROVIDER` 和 `STACK`每个流水线任务具有不同的值:
对于 `PROVIDER` 和 `STACK`:
```plaintext
```明文 deploystacks: [aws, monitoring]
deploystacks:[aws,监控] deploystacks: [aws, app1]
部署堆栈:[aws,app1] deploystacks: [aws, app2]
部署堆栈:[aws,app2] deploystacks: [ovh, monitoring]
deploystacks: [ovh, 监控] deploystacks: [ovh, backup]
部署堆栈:[ovh,备份] deploystacks: [ovh, app]
部署堆栈:[ovh,应用程序] deploystacks: [gcp, data]
部署堆栈:[gcp,数据] deploystacks: [gcp, processing]
部署堆栈:[gcp,处理] deploystacks: [vultr, data]
部署堆栈:[vultr,数据] deploystacks: [vultr, processing]
部署堆栈:[vultr,处理] ```
``
##### 一维 `matrix` 流水线任务
流水线任务命名风格[在 GitLab 13.4 中改进](https://gitlab.com/gitlab-org/gitlab/-/issues/230452)。
#####一维`矩阵`流水线任务
> [介绍](https://gitlab.com/gitlab-org/gitlab/-/issues/26362) 在 GitLab 13.5 中。
你还可以在单​​个流水线任务中使用一维矩阵: 你还可以在单​​个流水线任务中使用一维矩阵:
```yaml ```yaml
部署堆栈: deploystacks:
阶段:部署 stage: deploy
脚本: script:
- 垃圾箱/部署 - bin/deploy
平行: parallel:
矩阵: matrix:
- 提供商:[aws、ovh、gcp、vultr] - PROVIDER: [aws, ovh, gcp, vultr]
`` ```
##### 并行`matrix` 触发流水线任务
> [介绍](https://gitlab.com/gitlab-org/gitlab/-/issues/270957) 在 GitLab 13.10 中。 ##### 并行 `matrix` 触发流水线任务
使用 `matrix:` 在单个流水线中多次并行运行 [trigger](#trigger) 流水线任务, 使用 `matrix:` 在单个流水线中多次并行运行 [trigger](#trigger) 流水线任务,但每个流水线任务实例都有不同的变量值。
但每个流水线任务实例都有不同的变量值。
```yaml ```yaml
部署堆栈: deploystacks:
阶段:部署 stage: deploy
扳机: trigger:
包括:path/to/child-pipeline.yml include: path/to/child-pipeline.yml
平行: parallel:
矩阵: matrix:
- 供应商:aws - PROVIDER: aws
堆栈:[监控,app1] STACK: [monitoring, app1]
- 提供者:ovh - PROVIDER: ovh
堆栈:[监控、备份] STACK: [monitoring, backup]
- 提供者:[gcp,vultr] - PROVIDER: [gcp, vultr]
堆栈:[数据] STACK: [data]
`` ```
此示例生成 6 个并行的 `deploystacks` 触发器流水线任务,每个流水线任务具有不同的值
对于 `PROVIDER` 和 `STACK`,它们使用这些变量创建了 6 个不同的子流水线。
```明文 此示例生成 6 个并行的 `deploystacks` 触发器流水线任务,对于 `PROVIDER` 和 `STACK` 每个流水线任务具有不同的值,它们使用这些变量创建了 6 个不同的子流水线。
deploystacks:[aws,监控]
部署堆栈:[aws,app1]
deploystacks: [ovh, 监控]
部署堆栈:[ovh,备份]
部署堆栈:[gcp,数据]
部署堆栈:[vultr,数据]
``
###`触发器` ```plaintext
deploystacks: [aws, monitoring]
deploystacks: [aws, app1]
deploystacks: [ovh, monitoring]
deploystacks: [ovh, backup]
deploystacks: [gcp, data]
deploystacks: [vultr, data]
```
> - [介绍](https://gitlab.com/gitlab-org/gitlab/-/issues/8997) 在 [GitLab Premium](https://about.gitlab.com/pricing/) 11.8。 ### `trigger`[](#trigger)
> - [移动](https://gitlab.com/gitlab-org/gitlab/-/issues/199224) 在 12.8 中免费使用 GitLab。
使用 `trigger` 定义下游流水线触发器。当 GitLab 开始一个 `trigger` 流水线任务时, 使用 `trigger` 定义下游流水线触发器。当开始一个 `trigger` 流水线任务时,会创建下游流水线。
创建下游流水线。
带有`trigger` 的流水线任务只能使用[有限的关键字集](../multi_project_pipelines.md#limitations)。 带有`trigger` 的流水线任务只能使用有限的关键字集。例如,你不能用 [`script`](#script),[`before_script`](#before_script),或 [`after_script`](#after_script)。
例如,你不能用 [`script`](#script), [`before_script`](#before_script),
或 [`after_script`](#after_script)。
你可以使用此关键字创建两种不同类型的下游流水线: 你可以使用此关键字创建两种不同类型的下游流水线:
- [多项目流水线](../multi_project_pipelines.md#creating-multi-project-pipelines-from-gitlab-ciyml) - 多项目流水线
- [子流水线](../parent_child_pipelines.md) - 子流水线
[在 GitLab 13.2](https://gitlab.com/gitlab-org/gitlab/-/issues/197140/) 及更高版本,你可以 你可以查看哪个流水线任务触发了下游流水线。在[流水线图](/docs/ci/pipelines#visualize-pipelines)中,并将鼠标悬停在下游流水线流水线任务上即可查看。
查看哪个流水线任务触发了下游流水线。在[流水线图](../pipelines/index.md#visualize-pipelines)中,
将鼠标悬停在下游流水线流水线任务上。
在 [GitLab 13.5](https://gitlab.com/gitlab-org/gitlab/-/issues/201938) 及更高版本中,你 你可以在与 `trigger` 相同的流水线任务中使用 [`when:manual`](#whenmanual)。
可以在与 `trigger` 相同的流水线任务中使用 [`when:manual`](#whenmanual)。在 GitLab 13.4 和
早些时候,将它们一起使用会导致错误 `jobs:#{job-name} when should be on_success, on_failure or always`。
你[无法使用 API 启动`手动`触发器流水线任务](https://gitlab.com/gitlab-org/gitlab/-/issues/284086)。
#### 多项目流水线的基本`trigger` 语法 #### 多项目流水线的基本 `trigger` 语法
你可以使用 `trigger` 关键字配置下游触发器 你可以使用 `trigger` 关键字和下游项目的完整路径配置下游触发器:
下游项目的完整路径:
```yaml ```yaml
规格: rspec:
阶段:测试 stage: test
脚本:bundle exec rspec script: bundle exec rspec
分期: staging:
阶段:部署 stage: deploy
触发器:我的/部署 trigger: my/deployment
`` ```
#### 多项目流水线的复杂`trigger` 语法 #### 多项目流水线的复杂 `trigger` 语法
你可以配置一个 GitLab 用来创建的分支名称 你可以配置一个用分支名称来创建的具有以下功能的下游流水线:
具有以下功能的下游流水线:
```yaml ```yaml
规格: rspec:
阶段:测试 stage: test
脚本:bundle exec rspec script: bundle exec rspec
分期: staging:
阶段:部署 stage: deploy
扳机: trigger:
项目:我的/部署 project: my/deployment
分支:稳定 branch: stable
`` ```
要从触发的流水线镜像状态: 要从触发的流水线镜像状态:
```yaml ```yaml
trigger_job: trigger_job:
扳机: trigger:
项目:我的/项目 project: my/project
策略:依赖 strategy: depend
`` ```
要从上游流水线镜像状态: 要从上游流水线镜像状态:
```yaml ```yaml
上游桥: upstream_bridge:
阶段:测试 stage: test
需要: needs:
流水线:其他/项目 pipeline: other/project
`` ```
#### 子流水线的`trigger` 语法
> [介绍](https://gitlab.com/gitlab-org/gitlab/-/issues/16094) 在 GitLab 12.7 中。 #### 子流水线的 `trigger` 语法
要创建 [子流水线](../parent_child_pipelines.md),请指定路径 要创建子流水线,请指定包含子流水线配置的 YAML 文件路径:
包含子流水线配置的 YAML 文件:
```yaml ```yaml
trigger_job: trigger_job:
扳机: trigger:
包括:path/to/child-pipeline.yml include: path/to/child-pipeline.yml
`` ```
类似于[多项目流水线](../multi_project_pipelines.md#mirroring-status-from-triggered-pipeline), 类似于多项目流水线,可以从触发的流水线中镜像状态:
可以从触发的流水线中镜像状态:
```yaml ```yaml
trigger_job: trigger_job:
扳机: trigger:
包括: include:
- 本地:path/to/child-pipeline.yml - local: path/to/child-pipeline.yml
策略:依赖 strategy: depend
`` ```
##### 使用生成的配置文件触发子流水线 ##### 使用生成的配置文件触发子流水线
> [介绍](https://gitlab.com/gitlab-org/gitlab/-/issues/35632) 在 GitLab 12.9 中。 你还可以通过动态生成的配置文件触发子流水线:
你还可以从 [动态生成的配置文件](../parent_child_pipelines.md#dynamic-child-pipelines) 触发子流水线:
```yaml ```yaml
生成配置: generate-config:
阶段:构建 stage: build
脚本:生成-ci-config > 生成-config.yml script: generate-ci-config > generated-config.yml
文物: artifacts:
路径: paths:
- 生成的 config.yml - generated-config.yml
子流水线: child-pipeline:
阶段:测试 stage: test
扳机: trigger:
包括: include:
- `artifacts`:生成的 config.yml - artifact: generated-config.yml
工作:生成配置 job: generate-config
`` ```
`generated-config.yml` 从 `artifacts`中提取并用作配置 `generated-config.yml` 是从 `artifacts` 中提取出来的,并被用作触发子流水线的配置。
用于触发子流水线。
##### 使用来自另一个项目的文件触发子流水线 ##### 使用来自另一个项目的文件触发子流水线
> [介绍](https://gitlab.com/gitlab-org/gitlab/-/issues/205157) 在 GitLab 13.5 中。 使用来自同一私有项目的文件触发子流水线实例,使用 [`include:file`](#includefile):
使用来自同一私有项目的文件触发子流水线
GitLab 实例,使用 [`include:file`](#includefile):
```yaml ```yaml
子流水线: child-pipeline:
扳机: trigger:
包括: include:
- 项目:'我的组/我的流水线库' - project: 'my-group/my-pipeline-library'
参考:'主要' ref: 'main'
文件:'/path/to/child-pipeline.yml' file: '/path/to/child-pipeline.yml'
`` ```
#### 使用 `trigger:strategy` 链接流水线 #### 使用 `trigger:strategy` 链接流水线[]((#linking-pipelines-with-triggerstrategy))
默认情况下,`trigger` 流水线任务以 `success` 状态完成 默认情况下,一旦创建了下游流水线,`trigger` 流水线任务就会以 `success` 状态完成。
一旦创建了下游流水线。
要强制 `trigger` 流水线任务等待下游(多项目或子)流水线完成,请使用 要强制 `trigger` 流水线任务等待下游(多项目或子)流水线完成,请配置 `strategy: depend`。此设置使触发流水线任务以 `running` 状态等待,直到触发流水线完成。此时,`trigger` 流水线任务与下游流水线任务完成并显示。
`策略:依赖`。此设置使触发流水线任务以“正在运行”状态等待,直到触发
流水线完成。此时,`trigger` 流水线任务完成并显示与
下游流水线任务。
此设置有助于保持流水线执行的线性。在以下示例中,流水线任务来自 此设置有助于保持流水线的线性执行。在以下示例中,来自后续阶段的流水线任务在开始之前会等待触发的流水线成功完成,这样做可以减少并行化。
后续阶段等待触发的流水线成功完成之前
开始,这减少了并行化。
```yaml ```yaml
trigger_job: trigger_job:
扳机: trigger:
包括:path/to/child-pipeline.yml include: path/to/child-pipeline.yml
策略:依赖 strategy: depend
`` ```
#### 通过 API 调用触发流水线
要强制重建特定分支、标记或提交,你可以使用 API 调用
带有触发令牌。
触发标记不同于 [`trigger`](#trigger) 关键字。 #### 通过 API 调用触发流水线
[在触发器文档中阅读更多内容。](../triggers/README.md) 要强制重建特定分支、 tag 或提交,你可以使用触发 `token` 调用 API 。
###`可中断` 触发 `token` 不同于 [`trigger`](#trigger) 关键字。
> [介绍](https://gitlab.com/gitlab-org/gitlab/-/issues/32022) 在 GitLab 12.3 中。 ### `interruptible`[](#interruptible)
使用 `interruptible` 表示如果新的流水线运行变得多余,则应取消正在运行的流水线任务。 `interruptible` 表示如果新的流水线运行变得多余,则应取消正在运行的流水线任务。默认为`false`(不可中断)。尚未开始(`pending`)的流水线任务被认为是可中断的并且可以安全的取消。此值仅在 [自动取消冗余流水线功能](/docs/ci/pipelines/settings#auto-cancel-redundant-pipelines)启用时可用。
默认为`false`(不可中断)。尚未开始(待处理)的流水线任务被认为是可中断的
并且可以安全取消。
此值仅在 [自动取消冗余流水线功能](../pipelines/settings.md#auto-cancel-redundant-pipelines) 时使用
已启用。
启用后,如果以下任一情况为真,则在同一分支上启动新流水线时会立即取消流水线: 启用后,如果以下任一情况为真,则在同一分支上启动新流水线时会立即取消流水线:
- 流水线中的所有流水线任务都设置为可中断的。 - 流水线中的所有流水线任务都设置为可中断的。
- 任何不间断的工作尚未开始。 - 任何不间断的流水线任务尚未开始。
将流水线任务设置为可以在启动后安全取消的可中断流水线任务(例如,构建流水线任务)。 将流水线任务设置为可以在启动后安全取消的可中断流水线任务(例如,构建流水线任务)。
在以下示例中,新流水线运行会导致现有运行流水线变为: 在以下示例中,新流水线运行会导致现有运行流水线变为:
- 取消,如果只有 `step-1` 正在运行或未决。 - 取消,如果只有 `step-1` 正在运行或 pending。
- 不会取消,一旦 `step-2` 开始运行。 - 不会取消,一旦 `step-2` 开始运行。
不间断流水线任务开始运行后,流水线无法取消。 不间断流水线任务开始运行后,流水线无法取消。
```yaml ```yaml
阶段: stages:
- 阶段1 - stage1
- 阶段2 - stage2
- 第三阶段 - stage3
步骤1:
阶段:stage1
脚本:
- echo "可以取消。"
可中断:真
第2步: step-1:
阶段:阶段2 stage: stage1
脚本: script:
- echo "不能取消。" - echo "Can be canceled."
interruptible: true
第 3 步: step-2:
阶段:stage3 stage: stage2
脚本: script:
- echo "因为第 2 步不能取消,所以这一步永远不能取消,即使它被设置为可中断。" - echo "Can not be canceled."
可中断:真
``
###`resource_group` step-3:
stage: stage3
script:
- echo "Because step-2 can not be canceled, this step can never be canceled, even though it's set as interruptible."
interruptible: true
```
> [介绍](https://gitlab.com/gitlab-org/gitlab/-/issues/15536​​) 在 GitLab 12.7 中。 ### `resource_group`[](#resource_group)
有时在一个环境中同时运行多个流水线任务或流水线 有时在一个环境中同时运行多个流水线任务或流水线可能会导致部署过程中出现错误。
可能会导致部署过程中出现错误。
为避免这些错误,请使用 `resource_group` 属性来确保 为避免这些错误,请使用 `resource_group` 属性来确保 Runner 不会同时运行某些流水线任务。资源组的行为与其他编程语言中的信号量极为相似。
跑步者不会同时运行某些流水线任务。资源组的行为相似
到其他编程语言中的信号量。
当在 `.codechina-ci.yml` 文件中为流水线任务定义了 `resource_group` 关键字时, 当在 `.codechina-ci.yml` 文件中为流水线任务定义了 `resource_group` 关键字时,同一项目的不同流水线中的流水线任务执行是相互排斥的。如果属于同一资源组的多个流水线任务同时进入队列,Runner 只选择其中一项流水线任务并运行。其他流水线任务需要等到 `resource_group` 空闲后才开始运行。
同一项目的不同流水线中的流水线任务执行是相互排斥的。
如果属于同一资源组的多个流水线任务同时入队,
跑步者只选择其中一项工作。其他工作等到
`resource_group` 是免费的。
例如: 例如:
```yaml ```yaml
部署到生产: deploy-to-production:
脚本:部署 script: deploy
资源组:生产 resource_group: production
`` ```
在这种情况下,两个独立流水线中的两个“部署到生产”流水线任务永远不能同时运行。因此,
你可以确保并发部署永远不会发生在生产环境中。
你可以为每个环境定义多个资源组。例如, 在这种情况下,两个独立流水线中的 `deploy-to-production` 流水线任务永远不能同时运行。因此,你可以确保在生产环境中永远不会发生并发部署。
部署到物理设备时,你可能有多个物理设备。每台设备
可以部署到,但在任何给定时间每个设备只能有一个部署。
`resource_group` 值只能包含字母、数字、`-`、`_`、`/`、`$`、`{`、`}`、`.` 和空格。 你可以为每个环境定义多个资源组。例如,部署到物理设备时,你可能有多个物理设备。可以部署到每台设备,但在任何给定时间内每个设备只能有一个部署。
它不能以`/`开头或结尾。
有关更多信息,请参阅 [部署安全](../environments/deployment_safety.md)。 `resource_group` 值只能包含字母、数字、`-`、`_`、`/`、`$`、`{`、`}`、`.` 和空格。它不能以`/`开头或结尾。
#### 具有跨项目/父子流水线的流水线级并发控制 #### 具有跨项目/父子流水线的流水线级并发控制
> [介绍](https://gitlab.com/gitlab-org/gitlab/-/issues/39057) 在 GitLab 13.9 中。 你可以为对并发敏感的下游流水线定义`resource_group`。[`trigger` 关键字](#trigger) 可以触发下游流水线。[`resource_group` 关键字](#resource_group) 可以与它​​共存。这有助于控制部署流水线的并发性,同时运行非敏感的流水线任务。
你可以为对并发敏感的下游流水线定义`resource_group`
处决。[`trigger` 关键字](#trigger) 可以触发下游流水线。这
[`resource_group` 关键字](#resource_group) 可以与它​​共存。这有助于控制
部署流水线的并发性,同时运行非敏感流水线任务。
以下示例在一个项目中有两个流水线配置。当流水线开始运行时, 以下示例在一个项目中有两个流水线配置。当流水线开始运行时,非敏感流水线任务首先执行,不受其他并发执行的流水线影响。但是,在这之前系统会确保没有其他部署流水线在运行触发部署(子)流水线。如果其他部署流水线正在运行,系统会等到这些流水线完成,然后再运行另一个。
非敏感流水线任务首先执行,不受其他并发执行的影响
流水线。但是,GitLab 确保之前没有其他部署流水线在运行
触发部署(子)流水线。如果其他部署流水线正在运行,GitLab 等待
直到这些流水线完成,然后再运行另一个。
```yaml ```yaml
# .codechina-ci.yml(父流水线) # .codechina-ci.yml (parent pipeline)
建造: build:
阶段:构建 stage: build
脚本:回声“建筑...” script: echo "Building..."
测试: test:
阶段:测试 stage: test
脚本:回声“测试...” script: echo "Testing..."
部署: deploy:
阶段:部署 stage: deploy
扳机: trigger:
包括:deploy.codechina-ci.yml include: deploy.gitlab-ci.yml
策略:依赖 strategy: depend
资源组:AWS 生产 resource_group: AWS-production
`` ```
```yaml ```yaml
# deploy.codechina-ci.yml(子流水线) # deploy.codechina-ci.yml (child pipeline)
阶段:
- 条款
- 部署
条款: stages:
阶段:准备 - provision
脚本:回声“供应...” - deploy
部署: provision:
阶段:部署 stage: provision
脚本:echo“正在部署...” script: echo "Provisioning..."
``
你必须定义 [`strategy:depend`](#linking-pipelines-with-triggerstrategy) deployment:
使用`trigger` 关键字。这确保在下游流水线之前不会释放锁 stage: deploy
完成。 script: echo "Deploying..."
```
###`发布` 你必须使用`trigger` 关键字定义 [`strategy:depend`](#linking-pipelines-with-triggerstrategy)。这将确保在下游流水线完成之前不会释放锁。
> [介绍](https://gitlab.com/gitlab-org/gitlab/merge_requests/19298) 在 GitLab 13.2 中。 ### `release`[](#release)
使用 `release` 创建一个 [release](../../user/project/releases/index.md)。 使用 `release` 创建一个 [release](/docs/user/project/releases)。需要 [`release-cli`](https://gitlab.com/gitlab-org/release-cli/-/tree/master/docs)
需要 [`release-cli`](https://gitlab.com/gitlab-org/release-cli/-/tree/master/docs) 在你的 Runner Docker 或 shell 执行器中可用。
在你的 GitLab Runner Docker 或 shell 执行器中可用。
支持这些关键字: `release` 支持以下这些关键字:
- [`tag_name`](#releasetag_name) - [`tag_name`](#releasetag_name)
- [`描述`](#releasedescription) - [`description`](#releasedescription)
- [`name`](#releasename)(可选) - [`name`](#releasename) (可选)
- [`ref`](#releaseref)(可选) - [`ref`](#releaseref) (可选)
- [`里程碑`](#releasemilestones)(可选) - [`milestones`](#releasemilestones) (可选)
- [`released_at`](#releasereleased_at)(可选) - [`released_at`](#releasereleased_at) (可选)
- [`assets:links`](#releaseassetslinks)(可选) - [`assets:links`](#releaseassetslinks) (可选)
仅当流水线任务处理没有错误时才会创建发布。如果 Rails API 仅当流水线任务处理没有错误时才会创建 release。如果 Rails API在 release 创建期间返回错误,则 `release` 流水线任务失败。
在发布创建期间返回错误,`release` 流水线任务失败。
#### `release-cli` Docker 镜像 #### `release-cli` Docker 镜像
你必须指定用于 `release-cli` 的 Docker 镜像: 你必须指定用于 `release-cli` 的 Docker 镜像:
```yaml ```yaml
图片:registry.gitlab.com/gitlab-org/release-cli:latest image:registry.gitlab.com/gitlab-org/release-cli:latest
`` ```
#### shell 执行程序的`release-cli` #### shell 执行程序的`release-cli`
> [介绍](https://gitlab.com/gitlab-org/release-cli/-/issues/21) 在 GitLab 13.8 中。 对于 Runner shell 执行程序,你可以为你的 [支持的操作系统和架构] (https://release-cli-downloads.s3.amazonaws.com/latest/index.html) 手动下载并安装 `release-cli`,安装后完成后就可以使用`release` 关键字了。
对于 GitLab Runner shell 执行程序,你可以为你的 [支持的操作系统和架构] (https://release-cli-downloads.s3.amazonaws.com/latest/index.html) 手动下载并安装 `release-cli`。
安装后,你应该可以使用`release` 关键字。
**在 Unix/Linux 上安装** **在 Unix/Linux 上安装**
1. 下载适用于你系统的二进制文件,以下示例适用于 amd64 系统: 1. 下载适用于你系统的二进制文件,以下示例适用于 amd64 系统:
```壳 ```shell
curl --location --output /usr/local/bin/release-cli "https://release-cli-downloads.s3.amazonaws.com/latest/release-cli-linux-amd64" curl --location --output /usr/local/bin/release-cli "https://release-cli-downloads.s3.amazonaws.com/latest/release-cli-linux-amd64"
`` ```
1. 赋予其执行权限: 1. 赋予其执行权限:
```壳 ```shell
须藤 chmod +x /usr/local/bin/release-cli sudo chmod +x /usr/local/bin/release-cli
`` ```
1. 验证`release-cli` 是否可用: 1. 验证 `release-cli` 是否可用:
```壳 ```shell
$ release-cli -v $ release-cli -v
发布 cli 版本 0.6.0 release-cli version 0.6.0
`` ```
**在 Windows PowerShell 上安装** **在 Windows PowerShell 上安装**
1. 在你系统的某处创建一个文件夹,例如`C:\GitLab\Release-CLI\bin` 1. 在你系统的某处创建一个文件夹,例如`C:\CSDN\Release-CLI\bin`
```壳 ```shell
New-Item -Path 'C:\GitLab\Release-CLI\bin' -ItemType 目录 New-Item -Path 'C:\CSDN\Release-CLI\bin' -ItemType Directory
`` ```
1.下载可执行文件: 1.下载可执行文件:
```壳 ```shell
PS C:\> Invoke-WebRequest -Uri "https://release-cli-downloads.s3.amazonaws.com/latest/release-cli-windows-amd64.exe" -OutFile "C:\GitLab\Release-CLI \bin\release-cli.exe” PS C:\> Invoke-WebRequest -Uri "https://release-cli-downloads.s3.amazonaws.com/latest/release-cli-windows-amd64.exe" -OutFile "C:\CSDN\Release-CLI\bin\release-cli.exe"
目录:C:\GitLab\Release-CLI Directory: C:\CSDN\Release-CLI
模式 LastWriteTime 长度 名称 Mode LastWriteTime Length Name
---- ------------- ------ ---- ---- ------------- ------ ----
d----- 3/16/2021 4:17 AM d----- 3/16/2021 4:17 AM bin
`` ```
1. 将目录添加到你的 `$env:PATH`: 1. 将目录添加到你的环境变量 `$env:PATH` 中:
```壳 ```shell
$env:PATH += ";C:\GitLab\Release-CLI\bin" $env:PATH += ";C:\GitLab\Release-CLI\bin"
`` ```
1. 验证`release-cli` 是否可用: 1. 验证`release-cli` 是否可用:
```壳 ```shell
PS C:\> release-cli -v PS C:\> release-cli -v
发布 cli 版本 0.6.0 release-cli version 0.6.0
`` ```
#### 使用自定义 SSL CA 证书颁发机构 #### 使用自定义 SSL CA 证书
你可以使用 `ADDITIONAL_CA_CERT_BUNDLE` CI/CD 变量来配置自定义 SSL CA 证书颁发机构, 当 `release-cli` 使用带有自定义证书的 HTTPS 请求通过API 创建 release 时,你可以使用 `ADDITIONAL_CA_CERT_BUNDLE` CI/CD 变量来配置自定义 SSL CA 证书并将它用于验证。`ADDITIONAL_CA_CERT_BUNDLE` 值应包含[text representation of the X.509 PEM public-key certificate](https://tools.ietf.org/html/rfc7468#section-5.1)或包含证书颁发机构的 `path/to/file`。例如,要在 `.codechina-ci.yml` 文件中配置此值,请使用以下命令:
当`release-cli`使用带有自定义证书的HTTPS通过API创建发布时,它用于验证对等点。
`ADDITIONAL_CA_CERT_BUNDLE` 值应包含
[X.509 PEM 公钥证书的文本表示](https://tools.ietf.org/html/rfc7468#section-5.1)
或包含证书颁发机构的`path/to/file`。
例如,要在 `.codechina-ci.yml` 文件中配置此值,请使用以下命令:
```yaml ```yaml
释放: release:
变量: variables:
ADDITIONAL_CA_CERT_BUNDLE: | ADDITIONAL_CA_CERT_BUNDLE: |
-----开始认证----- -----BEGIN CERTIFICATE-----
MIIGqTCCBJGgAwIBAgIQI7AVxxVwg2kch4d56XNdDjANBgkqhkiG9w0BAQsFADCB MIIGqTCCBJGgAwIBAgIQI7AVxxVwg2kch4d56XNdDjANBgkqhkiG9w0BAQsFADCB
... ...
jWgmPqF3vUbZE0EySetPJquRFRKIesyJuBFMAs= jWgmPqF3vUbZE0EyScetPJquRFRKIesyJuBFMAs=
-----结束证书----- -----END CERTIFICATE-----
脚本: script:
- 回声“创建发布” - echo "Create release"
释放: release:
名称:'我很棒的版本' name: 'My awesome release'
tag_name: '$CI_COMMIT_TAG' tag_name: '$CI_COMMIT_TAG'
`` ```
`ADDITIONAL_CA_CERT_BUNDLE` 值也可以配置为 `ADDITIONAL_CA_CERT_BUNDLE` 值也可以配置为[UI 中的自定义变量](/docs/ci/variables#custom-cicd-variables),
[UI 中的自定义变量](../variables/README.md#custom-cicd-variables), 要么是一个 `file`,它需要证书的路径;要么是一个变量,它需要证书的文本内容。
要么作为一个`file`,它需要证书的路径,或者作为一个变量,
这需要证书的文本表示。
####`脚本` #### `script`
除 [trigger](#trigger) 流水线任务之外的所有流水线任务都必须具有 `script` 关键字。一个`发布` 除 [trigger](#trigger) 流水线任务之外的所有流水线任务都必须具有 `script` 关键字。一个 `release`流水线任务可以使用脚本命令的输出,但在你不需要的时候你也可以使用占位符脚本:
流水线任务可以使用脚本命令的输出,但如果出现以下情况,你可以使用占位符脚本
不需要脚本:
```yaml ```yaml
脚本: script:
- echo '发布工作' - echo 'release job'
`` ```
[问题](https://gitlab.com/gitlab-org/gitlab/-/issues/223856) 存在以在即将发布的 GitLab 版本中删除此要求。
一个流水线可以有多个“发布”流水线任务,例如: 一个流水线可以有多个 `release` 流水线任务,例如:
```yaml ```yaml
ios-发布: ios-release:
脚本: script:
- echo 'iOS 发布工作' - echo 'iOS release job'
释放: release:
标签名称:v1.0.0-ios tag_name: v1.0.0-ios
描述:'iOS 发布 v1.0.0' description: 'iOS release v1.0.0'
安卓发布: android-release:
脚本: script:
- echo 'Android 发布工作' - echo 'Android release job'
释放: release:
标签名称:v1.0.0-android tag_name: v1.0.0-android
描述:'Android 发布 v1.0.0' description: 'Android release v1.0.0'
`` ```
####`release:tag_name` #### `release:tag_name`
你必须为发布指定一个 `tag_name`。该标签可以引用现有的 Git 标签或 你必须为 release 指定一个 `tag_name`。该 tag 可以引用现有的 Git tag 或者你可以指定一个新的 tag。
你可以指定一个新标签。
当存储库中不存在指定的标签时,将从流水线的关联 SHA 创建一个新标签。 当存储库中不存在指定的 tag 时,将从流水线的关联 SHA 创建一个新的 tag。
例如,从 Git 标签创建发布时: 例如,从 Git tag 创建发布时:
```yaml ```yaml
工作: job:
释放: release:
标签名称:$CI_COMMIT_TAG tag_name: $CI_COMMIT_TAG
description: '发布说明' description: 'Release description'
`` ```
也可以创建任何唯一的标签,在这种情况下,`only: tags` 不是强制性的。 也可以创建任何唯一的标签,在这种情况下,`only: tags` 不是强制性的。比如下方的示例:
语义版本控制示例:
```yaml ```yaml
工作: job:
释放: release:
标签名称:${MAJOR}_${MINOR}_${REVISION} tag_name: ${MAJOR}_${MINOR}_${REVISION}
description: '发布说明' description: 'Release description'
`` ```
- 只有当流水线任务的主脚本成功时才会创建发布。 - 只有当流水线任务的主脚本成功时才会创建发布。
- 如果发布已经存在,则不会更新并且带有`release` 关键字的流水线任务失败。 - 如果发布已经存在,则不会更新并且带有`release` 关键字的流水线任务失败。
- `release` 部分在 `script` 标签之后和 `after_script` 之前执行。 - `release` 在 `script` 之后、 `after_script` 之前执行。
####`发布:名称` #### `release:name`
版本名称。如果省略,则使用 `release: tag_name` 的值填充。 版本名称。如果省略,则使用 `release: tag_name` 的值填充。
####`发布:描述` #### `release:description`
指定发布的详细描述。你还可以指定一个包含 指定发布的详细描述。你还可以指定一个包含描述内容的文件。
描述。
##### 从文件中读取描述 ##### Read description from a file
> [介绍](https://gitlab.com/gitlab-org/release-cli/-/merge_requests/67) 在 GitLab 13.7 中。 你可以在 `$CI_PROJECT_DIR` 中指定一个包含描述的文件。该文件路径必须是相对于项目目录(`$CI_PROJECT_DIR`)的,如果文件是一个符号链接,它就不能驻留在 `$CI_PROJECT_DIR` 之外。`./path/to/file` 和文件名不能包含空格。
你可以在 `$CI_PROJECT_DIR` 中指定一个包含描述的文件。该文件必须是相对的
到项目目录(`$CI_PROJECT_DIR`),如果文件是一个符号链接,它就不能驻留
在 `$CI_PROJECT_DIR` 之外。`./path/to/file` 和文件名不能包含空格。
```yaml ```yaml
工作: job:
释放: release:
标签名称:${MAJOR}_${MINOR}_${REVISION} tag_name: ${MAJOR}_${MINOR}_${REVISION}
描述:'./path/to/CHANGELOG.md' description: './path/to/CHANGELOG.md'
`` ```
####`发布:参考` #### `release:ref`
如果 `release: tag_name` 还不存在,则从 `ref` 创建发布。 如果 `release: tag_name` 还不存在,则从 `ref` 创建 release。`ref` 可以是提交 SHA、另一个 tag 名称或分支名称。
`ref` 可以是提交 SHA、另一个标签名称或分支名称。
####`发布:里程碑` #### `release:milestones`
与发布相关的每个里程碑的标题。 与 release 相关的每个里程碑的标题。
####`release:released_at` #### `release:released_at`
发布准备就绪的日期和时间。如果不是,则默认为当前日期和时间 release 准备就绪的日期和时间。如果未定义的话则默认使用当前日期和时间。应该用引号引起来并用符合 ISO 8601 格式来表示。
定义。应该用引号引起来并以 ISO 8601 格式表示。
```json ```json
发布时间:'2021-03-15T08:00:00Z' released_at: '2021-03-15T08:00:00Z'
`` ```
####`发布:资产:链接`
> [介绍](https://gitlab.com/gitlab-org/gitlab/-/issues/271454) 在 GitLab 13.12 中。 #### `release:assets:links`
在发布中包含 [资产链接](../../user/project/releases/index.md#release-assets)。 在发布中包含[资产链接](/docs/user/project/releases#release-assets)。
笔记: > 注意:需要 `release-cli` 版本 v0.4.0 或更高版本。
需要 `release-cli` 版本 v0.4.0 或更高版本。
```yaml ```yaml
资产: assets:
链接: links:
- 名称:'资产1' - name: 'asset1'
网址:'https://example.com/assets/1' url: 'https://example.com/assets/1'
- 名称:'资产2' - name: 'asset2'
网址:'https://example.com/assets/2' url: 'https://example.com/assets/2'
文件路径:'/pretty/url/1' # 可选 filepath: '/pretty/url/1' # optional
link_type: 'other' # 可选 link_type: 'other' # optional
`` ```
#### `release` 的完整示例 #### `release` 的完整示例
如果你结合之前的 `release` 例子,你会得到两个选项,这取决于你如何生成 如果你结合之前的 `release` 例子,你会得到两个选项,这取决于你如何生成 tag 。你不能同时使用这些选项,因此请选择一个来使用:
标签。你不能同时使用这些选项,因此请选择一个:
- 在推送 Git 标签或添加 Git 标签时创建发布 - 在推送 Git tag 或添加 Git tag 时创建 release :
通过转到 **Repository > Tags** 在 UI 中:
```yaml ```yaml
发布工作: release_job:
阶段:发布 stage: release
图片:registry.gitlab.com/gitlab-org/release-cli:latest image: registry.gitlab.com/gitlab-org/release-cli:latest
规则: rules:
- if: $CI_COMMIT_TAG # 手动创建标签时运行此流水线任务 - if: $CI_COMMIT_TAG # Run this job when a tag is created manually
脚本: script:
- echo '正在运行 release_job' - echo 'running release_job'
释放: release:
name: '发布 $CI_COMMIT_TAG' name: 'Release $CI_COMMIT_TAG'
描述:'使用 release-cli $EXTRA_DESCRIPTION 创建' # $EXTRA_DESCRIPTION 必须被定义 description: 'Created using the release-cli $EXTRA_DESCRIPTION' # $EXTRA_DESCRIPTION must be defined
tag_name: '$CI_COMMIT_TAG' # 流水线中的其他地方。 tag_name: '$CI_COMMIT_TAG' # elsewhere in the pipeline.
参考:'$CI_COMMIT_TAG' ref: '$CI_COMMIT_TAG'
里程碑: milestones:
- 'm1' - 'm1'
- 'm2' - 'm2'
- 'm3' - 'm3'
released_at: '2020-07-15T08:00:00Z' # 可选,如果未定义则自动生成,或者可以使用变量。 released_at: '2021-05-29T14:05:00Z' # Optional, is auto generated if not defined, or can use a variable.
assets: # 可选,多个资产链接 assets: # Optional, multiple asset links
链接: links:
- 名称:'资产1' - name: 'asset1'
网址:'https://example.com/assets/1' url: 'https://example.com/assets/1'
- 名称:'资产2' - name: 'asset2'
网址:'https://example.com/assets/2' url: 'https://example.com/assets/2'
文件路径:'/pretty/url/1' # 可选 filepath: '/pretty/url/1' # optional
link_type: 'other' # 可选 link_type: 'other' # optional
`` ```
- 要在提交推送或合并到默认分支时自动创建发布, - 要在提交推送至默认分支或合并到默认分支时自动创建 release,使用一个用变量定义的新 Git tag:
使用一个用变量定义的新 Git 标签:
> 注意:在 `before_script` 或 `script` 中设置的环境变量不可扩展到同一份流水线任务中使用。
笔记:
在 `before_script` 或 `script` 中设置的环境变量不可用于扩展
在同一份工作中。阅读更多关于
[可能使变量可用于扩展](https://gitlab.com/gitlab-org/gitlab-runner/-/issues/6400)。
```yaml ```yaml
准备工作: prepare_job:
stage: prepare # 这个阶段必须在发布阶段之前运行 stage: prepare # This stage must run before the release stage
规则: rules:
- 如果:$CI_COMMIT_TAG - if: $CI_COMMIT_TAG
when: never # 手动创建标签时不要运行此流水线任务 when: never # Do not run this job when a tag is created manually
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # 当提交被推送或合并到默认分支时运行这个流水线任务 - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # Run this job when commits are pushed or merged to the default branch
脚本: script:
- echo "EXTRA_DESCRIPTION=some message" >> variables.env # 生成 EXTRA_DESCRIPTION 和 TAG 环境变量 - echo "EXTRA_DESCRIPTION=some message" >> variables.env # Generate the EXTRA_DESCRIPTION and TAG environment variables
- echo "TAG=v$(cat VERSION)" >> variables.env # 并附加到 variables.env 文件 - echo "TAG=v$(cat VERSION)" >> variables.env # and append to the variables.env file
文物: artifacts:
报告: reports:
dotenv: variables.env # 使用 artifacts:reports:dotenv 将变量暴露给其他流水线任务 dotenv: variables.env # Use artifacts:reports:dotenv to expose the variables to other jobs
发布工作: release_job:
阶段:发布 stage: release
图片:registry.gitlab.com/gitlab-org/release-cli:latest image: registry.gitlab.com/gitlab-org/release-cli:latest
需要: needs:
- 工作:prepare_job - job: prepare_job
文物:真实 artifacts: true
规则: rules:
- 如果:$CI_COMMIT_TAG - if: $CI_COMMIT_TAG
when: never # 手动创建标签时不要运行此流水线任务 when: never # Do not run this job when a tag is created manually
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # 当提交被推送或合并到默认分支时运行这个流水线任务 - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # Run this job when commits are pushed or merged to the default branch
脚本: script:
- echo '为 $TAG 运行 release_job' - echo 'running release_job for $TAG'
释放: release:
name: '发布 $TAG' name: 'Release $TAG'
描述:“使用 release-cli $EXTRA_DESCRIPTION 创建”# $EXTRA_DESCRIPTION 和 $TAG description: 'Created using the release-cli $EXTRA_DESCRIPTION' # $EXTRA_DESCRIPTION and the $TAG
tag_name: '$TAG' # 变量必须在别处定义 tag_name: '$TAG' # variables must be defined elsewhere
ref: '$CI_COMMIT_SHA' # 在流水线中。例如,在 ref: '$CI_COMMIT_SHA' # in the pipeline. For example, in the
里程碑:# prepare_job milestones: # prepare_job
- 'm1' - 'm1'
- 'm2' - 'm2'
- 'm3' - 'm3'
released_at: '2020-07-15T08:00:00Z' # 可选,如果未定义则自动生成,或者可以使用变量。 released_at: '2021-05-29T14:05:00Z' # Optional, is auto generated if not defined, or can use a variable.
资产: assets:
链接: links:
- 名称:'资产1' - name: 'asset1'
网址:'https://example.com/assets/1' url: 'https://example.com/assets/1'
- 名称:'资产2' - name: 'asset2'
网址:'https://example.com/assets/2' url: 'https://example.com/assets/2'
文件路径:'/pretty/url/1' # 可选 filepath: '/pretty/url/1' # optional
link_type: 'other' # 可选 link_type: 'other' # optional
`` ```
#### 将资产发布为通用包 #### 将资产发布为通用包
你可以使用 [通用包](../../user/packages/generic_packages/) 来托管你的发布资产。 你可以使用通用包来托管你的发布资产。
一个完整的例子,请参见 [Release assets as Generic packages](https://gitlab.com/gitlab-org/release-cli/-/tree/master/docs/examples/release-assets-as-generic-package /)
项目。
#### `release-cli` 命令行 #### `release-cli` 命令行
`release` 节点下的条目被转换为 `bash` 命令行并发送 `release` 节点下的条目被转换为 `bash` 命令行并发送到包含了 [release-cli](https://gitlab.com/gitlab-org/release-cli)的 Docker 容器,你也可以直接从 `script` 条目调用 `release-cli`。
到 Docker 容器,其中包含 [release-cli](https://gitlab.com/gitlab-org/release-cli)。
你也可以直接从 `script` 条目调用 `release-cli`。
例如,如果你使用前面描述的 YAML:
```壳
release-cli create --name "Release $CI_COMMIT_SHA" --description "使用 release-cli $EXTRA_DESCRIPTION 创建" --tag-name "v${MAJOR}.${MINOR}.${REVISION}" --ref "$CI_COMMIT_SHA" --released-at "2020-07-15T08:00:00Z" --milestone "m1" --milestone "m2" --milestone "m3" --assets-link "{\"name\" :\"asset1\",\"url\":\"https://example.com/assets/1\",\"link_type\":\"other\"}
``
###`秘密`
> [介绍](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/33014) 在 GitLab 13.4 中。
使用 `secrets` 指定流水线任务需要的 [CI/CD Secrets](../secrets/index.md)。它应该是一个哈希,
键应该是可供流水线任务使用的变量的名称。
每个秘密的值都保存在一个临时文件中。这个文件的路径存储在这些
变量。
#### `secrets:vault` **(PREMIUM)**
> [介绍](https://gitlab.com/gitlab-org/gitlab/-/issues/28321) 在 GitLab 13.4 中。 例如,如果你使用上方例子中的 YAML:
使用 `vault` 指定 [Hashicorp's Vault](https://www.vaultproject.io/) 提供的机密。 ```shell
release-cli create --name "Release $CI_COMMIT_SHA" --description "Created using the release-cli $EXTRA_DESCRIPTION" --tag-name "v${MAJOR}.${MINOR}.${REVISION}" --ref "$CI_COMMIT_SHA" --released-at "2020-07-15T08:00:00Z" --milestone "m1" --milestone "m2" --milestone "m3" --assets-link "{\"name\":\"asset1\",\"url\":\"https://example.com/assets/1\",\"link_type\":\"other\"}
这种语法有多种形式。最短的形式假定使用 ```
[KV-V2](https://www.vaultproject.io/docs/secrets/kv/kv-v2) 秘密引擎,
安装在默认路径 `kv-v2` 上。秘密路径的最后一部分是
字段来获取值:
```yaml
工作:
秘密:
数据库密码:
vault: production/db/password # 转换为秘密 `kv-v2/data/production/db`,字段 `password`
``
你可以通过添加以 `@` 开头的后缀来指定自定义机密引擎路径:
```yaml
工作:
秘密:
数据库密码:
vault: production/db/password@ops # 转换为秘密 `ops/data/production/db`,字段 `password`
``
在语法的详细形式中,你可以明确指定所有详细信息: ### `secrets`[](#secrets)
```yaml 使用 `secrets` 指定流水线任务需要的 CI/CD Secrets。它应该是一个 hash 值,键应该是可供流水线任务使用的变量的名称。每个秘密的值都保存在一个临时文件中。这个文件的路径存储在这些变量中。
工作:
秘密:
DATABASE_PASSWORD: # 转换为秘密 `ops/data/production/db`,字段 `password`
保险库:
引擎:
名称: kv-v2
路径:ops
路径:生产/数据库
字段:密码
``
###`页面` ### `pages`
使用 `pages` 将静态内容上传到 GitLab。内容 使用 `pages` 将静态内容上传到 CODE CHINA 中。内容会作为网站发布。你必须:
然后作为网站发布。你必须:
- 将任何静态内容放在 `public/` 目录中。 - 将任何静态内容放在 `public/` 目录中。
- 定义 [`artifacts`](#artifacts) 和 `public/` 目录的路径。 - 定义 [`artifacts`](#artifacts) 和 `public/` 目录的路径。
以下示例将所有文件从项目的根目录移动到 以下示例将所有文件从项目的根目录移动到 `public/` 目录。`.public` 在 `cp` 时将不会复制 `public/`,以避免陷入无限循环:
`public/` 目录。`.public` 解决 `cp` 也不会复制
`public/` 在无限循环中传递给自身:
```yaml ```yaml
页数: pages:
阶段:部署 stage: deploy
脚本: script:
- mkdir .public - mkdir .public
- cp -r * .public - cp -r * .public
- mv .public 公共 - mv .public public
文物: artifacts:
路径: paths:
- 上市 - public
只要: only:
- 主要的 - main
`` ```
查看 [GitLab Pages 用户文档](../.project/pages/index.md)。
###`继承` > 注,目前 CODE CHINA 单独提供了 Pages 服务,不再支持通过 CI YAML 文件触发的 Pages 部署,具体可参考 [Pages 帮助文档](/docs/user/pages)。
> [介绍](https://gitlab.com/gitlaitlab/-/issues/207484) 在 GitLab 12.9 中。 ### `inherit`[](#inherit)
使用 `inherit:` 来控制全局定义继承 使用 `inherit:` 来控制全局定义继承和变量。
和变量。
要启用或禁用所有 `default:` 或 `vs:` 关键字的继承,请使用: 要启用或禁用所有 `default:` 或 `variables:` 关键字的继承,请使用:
- `default: true` 或 `default: fa - `default: true` 或 `default: false`
- `变量:真`或`变量:假` - `variables: true` 或 `variables: false`
要仅继承 `default:` 关键字或 `var` 的子集,请指定 要仅继承 `default:` 关键字或 `variables:` 的子集,请指定你想继承的内容。任何未列出的内容都**不**会集成。请使用以下格式中的一种:
你想继承。任何未列出的都是**不*用
以下格式之一:
```yaml ```yaml
继承: inherit:
默认值:[关键字 1,关键字 2] default: [keyword1, keyword2]
变量:[VARIABLE1, VARIABLE2] variables: [VARIABLE1, VARIABLE2]
`` ```
或者: 或者:
```yaml ```yaml
继承: inherit:
默认: default:
- 关键字 1 - keyword1
- 关键字 2 - keyword2
变量: variables:
- 变量 1 - VARIABLE1
- 变量 2 - VARIABLE2
`` ```
在以下示例中: 在以下示例中:
-`rubocop`: - `rubocop`:
- 继承:没有。 - 继承:没有继承任何内容。
- `rspec`: - `rspec`:
- 继承:默认的`image` 和`WEBHOO变量。 - 继承:默认的 `image` 和 `WEBHOOK_URL` 变量。
- **不** 继承:默认的`before_sc和`DOMAIN` 变量。 - **不** 继承:默认的 `before_script` 和 `DOMAIN` 变量。
-`水豚`: - `capybara`:
- 继承:默认的`before_script` `。 - 继承:默认的 `before_script` 和 `image`。
- **不** 继承:`DOMAIN` 和`WEBH` 变量。 - **不** 继承:`DOMAIN` 和 `WEBHOOK_URL` 变量。
-`业力`: - `karma`:
- 继承:默认的`image` 和`before`,以及`DOMAIN` 变量。 - 继承:默认的`image` 和 `before_script`,以及 `DOMAIN` 变量。
- **不** 继承:`WEBHOOK_URL` - **不** 继承:`WEBHOOK_URL` 变量。
```yaml ```yaml
默认: default:
图像:'红宝石:2.4' image: 'ruby:2.4'
之前_脚本: before_script:
- 回声你好世界 - echo Hello World
变量: variables:
域:example.com DOMAIN: example.com
WEBHOOK_URL: https://my-webhooke.com WEBHOOK_URL: https://my-webhook.example.com
防暴警察: rubocop:
继承: inherit:
默认值:假 default: false
变量:假 variables: false
脚本:捆绑执行 rubocop script: bundle exec rubocop
规格: rspec:
继承: inherit:
默认值:[图像] default: [image]
变量:[WEBHOOK_URL] variables: [WEBHOOK_URL]
脚本:bundle exec rspec script: bundle exec rspec
水豚: capybara:
继承: inherit:
变量:假 variables: false
脚本:捆绑执行水豚 script: bundle exec capybara
业力: karma:
继承: inherit:
默认值:真 default: true
变量:[域] variables: [DOMAIN]
剧本:业力 script: karma
`` ```
##`变量` ## `variables`[](#variables)
> 在 GitLab Runner v0.5.0 中引入。 [CI/CD 变量](/docs/ci/variables)是一些传递给流水线任务的可配置值。它们可以在全局以及每个流水线任务中设置。
[CI/CD 变量](../variables/README.传递给流水线任务的可配置值。
它们可以在全局和每个流水线任务中设置。
有两种类型的变量。 有两种类型的变量。
- [自定义变量](../variables/READMstom-cicd-variables): - [自定义变量](/docs/ci/variables#custom-cicd-variables):
你可以在 GitLab UI 中的 `.gitlal` 文件中定义它们的值, 你可以在 CODE CHINA UI 中的 `.codechina-ci.yml` 文件中定义它们的值,或通过 API 来定义。你还可以在[手动运行流水线](/docs/ci/pipelines#run-a-pipeline-manually)中输入变量。
或通过使用 API。你还可以在 GitL中输入变量 - 预定义变量:这些值由 Runner 自己设置。比如 `CI_COMMIT_REF_NAME`,它是指构建项目的分支或 tag。
[手动运行流水线](../pipelines/indun-a-pipeline-manually)。
- [预定义变量](../variables/predeariables.md):
这些值由跑步者自己设置。
一个例子是`CI_COMMIT_REF_NAME项目构建的分支或标签。
定义变量后,你可以在所有执行的中使用它。 定义好变量后,你可以在所有执行的中使用它。
变量用于非敏感项目配置,例如: 变量用于非敏感的项目配置,例如:
```yaml ```yaml
变量: variables:
DEPLOY_SITE: "https://example.c DEPLOY_SITE: "https://example.com/"
部署_流水线任务: deploy_job:
阶段:部署 stage: deploy
脚本: script:
- 部署脚本 --url $DEPLOY_SITE "/" - deploy-script --url $DEPLOY_SITE --path "/"
deploy_review_job: deploy_review_job:
阶段:部署 stage: deploy
变量: variables:
REVIEW_PATH: "/review" REVIEW_PATH: "/review"
脚本: script:
- deploy-review-script --url _SITE --path $REVIEW_PATH - deploy-review-script --url $DEPLOY_SITE --path $REVIEW_PATH
`` ```
变量的名称和值只能使用整数和字
如果在 `gitlab-ci.yml` 文件的顶个变量,它是全局的, 变量的名称和值只能使用整数和字符。
这意味着它适用于所有工作。如果定义变量,则它可用
只到那个工作。
如果为特定流水线任务全局定义了同名变 如果在 `.codechina-ci.yml` 文件的顶部定义了一个变量,那么这个变量就是全局的,这意味着它适用于所有流水线任务。如果是在某个流水线任务重定义的变量,则它只可用于该流水线任务。
[特定于流水线任务的变量覆盖全局变量](..les/README.md#cicd-variable-precedence)。
所有 YAML 定义的变量也设置为任何 如果为特定流水线任务定义了与全局变量同名的变量,则[特定于流水线任务的变量将覆盖全局变量](/docs/ci/variables#cicd-variable-precedence)。
[Docker 服务容器](../services/ind
你可以使用 [YAML 变量锚点](#yaml-or-variables)。 所有 YAML 中定义的变量对关联的 Docker 服务容器同样生效。
### 在手动流水线中预填充变量 你可以使用 [YAML 变量锚点](#yaml-anchors-for-variables)。
> [引入](https://gitlab.com/gitlalab/-/issues/30101) GitLab 13.7。 ### 在手动流水线中预填充变量[]()
使用 `value` 和 `description` 预先填充的流水线级(全局)变量](../pipelines/index.md#prefill-variables-in-manuapipe 当[手动运行流水线](/docs/ci/pipelines#run-a-pipeline-manually)时可使用 `value` 和 `description` 预先填充的[流水线级(全局)变量](/docs/ci/pipelines#prefill-variables-in-manuapipe):
当[手动运行流水线](../pipelines/ind-a-pipeline-manually):
```yaml ```yaml
变量: variables:
部署环境: DEPLOY_ENVIRONMENT:
value: "staging" # 默认部署到 value: "staging" # Deploy to staging by default
描述:“部署目标。如果需要,为‘canary’或‘production’。” description: "The deployment target. Change this variable to 'canary' or 'production' if needed."
`` ```
当你手动运行流水线时,你无法将作预填充。 当你手动运行流水线时,你无法将对流水线任务级别的变量进行预填充操作。
### 使用变量配置跑步者行为 ### 使用变量配置 Runner 行为
你可以使用 [CI/CD variables](../vREADME.md) 来配置运行程序如何处理 Git 请求: 你可以使用 [CI/CD variables](/docs/ci/variables) 来配置运行程序如何处理 Git 请求:
- [`GIT_STRATEGY`](../runners/REAt-strategy) - [`GIT_STRATEGY`](/docs/ci/runners#git-strategy)
- [`GIT_SUBMODULE_STRATEGY`](../rADME.md#git-submodule-strategy) - [`GIT_SUBMODULE_STRATEGY`](/docs/ci/runners#git-submodule-strategy)
- [`GIT_CHECKOUT`](../runners/REAt-checkout) - [`GIT_CHECKOUT`](/docs/ci/runners#git-checkout)
- [`GIT_CLEAN_FLAGS`](../runners/#git-clean-flags) - [`GIT_CLEAN_FLAGS`](/docs/ci/runners#git-clean-flags)
- [`GIT_FETCH_EXTRA_FLAGS`](../ruDME.md#git-fetch-extra-flags) - [`GIT_FETCH_EXTRA_FLAGS`](/docs/ci/runners#git-fetch-extra-flags)
- [`GIT_DEPTH`](../runners/READMEow-cloning)(浅克隆) - [`GIT_DEPTH`](/docs/ci/runners#shallow-cloning)(浅克隆)
- [`GIT_CLONE_PATH`](../runners/Rcustom-build-directories)(自定义构建目录) - [`GIT_CLONE_PATH`](#custom-build-directories)(自定义构建目录)
- [`TRANSFER_METER_FREQUENCY`](..README.md#artifact-and-cache-settings)( `artifacts`/缓存表更新频率) - [`TRANSFER_METER_FREQUENCY`](/docs/ci/runners#artifact-and-cache-settings)( `artifacts`/缓存更新频率)
- [`ARTIFACT_COMPRESSION_LEVEL`](s/README.md#artifact-and-cache-settings)( `artifacts`存档器压缩级别) - [`ARTIFACT_COMPRESSION_LEVEL`](/docs/ci/runners#artifact-and-cache-settings)( `artifacts`存档器压缩级别)
- [`CACHE_COMPRESSION_LEVEL`](../EADME.md#artifact-and-cache-settings)(缓存归档压缩级别) - [`CACHE_COMPRESSION_LEVEL`](/docs/ci/runners#artifact-and-cache-settings)(缓存归档压缩级别)
你还可以使用变量来配置跑步者的次数 你还可以使用变量来配置 Runner 的次数[尝试流水线任务执行的某些阶段](/docs/ci/runners#job-stages-attempts)。
[尝试流水线任务执行的某些阶段](../runne.md#job-stages-attempts)。
## YAML 特定的功能 ## YAML 特定的功能[]()
在你的 `.codechina-ci.yml` 文件中AML 特定的特性,比如锚点(`&`)、别名(`*`)、 在你的 `.codechina-ci.yml` 文件中,你可以使用一些 YAML 特定的特性,比如锚点(`&`)、别名(`*`)、和 map 合并(`<<`)。使用这些特性可以减少 `.codechina-ci.yml` 文件中的代码复杂性。
和地图合并(`<<`)。使用这些功
`.codechina-ci.yml` 文件中的代码。
阅读有关各种 [YAML 功能](https://minutes.com/docs/yaml/) 的更多信息。 点击阅读更多有关各种 [YAML 功能](https://minutes.com/docs/yaml/) 的信息。
在大多数情况下,[`extends` 关键字s) 对用户更友好,你应该 在大多数情况下,[`extends` 关键字](#extends) 对用户更友好,你应该尽可能地使用它。
尽可能使用它。
你可以使用 YAML 锚点来合并 YAML 。 你可以使用 YAML 锚点来合并 YAML 。
### 锚 ### 锚[](#anchors)
YAML 有一个叫做“锚点”的功能,你制 YAML 有一个叫做“锚点”的功能,可以允许你在整个文档中复制内容。
整个文档的内容。
使用锚点复制或继承属性。将锚点与作](#hide-jobs) 结合使用 使用锚点复制或继承属性。将锚点与[隐藏的流水线任务](#hide-jobs) 结合起来用作你的流水线任务模板。当有重复的键,系统会基于键执行反向深度合并。
为你的工作提供模板。当有重复的键
基于键执行反向深度合并。
使用 [`include`](#include) 时,文件使用 YAML 锚点 当使用 [`include`](#include) 时,你将无法跨文件使用 YAML 锚点关键词。锚只在定义它们的文件中生效。如果要在不同的 YAML 文件中重用配置,你可以使用 [`!reference` tags](#reference-tags) 或 [`extends` 关键词](#extends)。
关键词。锚只在定义它们的文件中置
从不同的 YAML 文件,使用 [`!refer签](#reference-tags) 或
[`extends` 关键字](#extends)。
以下示例使用锚点和地图合并。它, 以下示例中,使用锚点和 map 合并。它创建了 `test1` 和 `test2` 两个流水线任务,并继承了 `.job_template` 的配置,每个流水线任务都定义了自己的自定义 `script`:
`test1` 和 `test2`,继承了 `.job_ 配置,每个
定义了自己的自定义“脚本”:
```yaml ```yaml
.job_template: &job_configuration # 隐藏的 yaml 配置,它定义了一个名为“job_configuration”的锚点 .job_template: &job_configuration # Hidden yaml configuration that defines an anchor named 'job_configuration'
图片:红宝石:2.6 image: ruby:2.6
服务: services:
- postgres - postgres
- Redis - redis
测试1: test1:
<<: *job_configuration # 合并'job_configuration'别名的内容 <<: *job_configuration # Merge the contents of the 'job_configuration' alias
脚本: script:
- test1 项目 - test1 project
测试2: test2:
<<: *job_configuration # 合并'job_configuration'别名的内容 <<: *job_configuration # Merge the contents of the 'job_configuration' alias
脚本: script:
- 测试2项目 - test2 project
`` ```
`&` 设置锚点的名称(`job_configuration`),`<<` 表示“合并 `&` 设置了锚点的名称(`job_configuration`),`<<` 表示“合并给定 hash 到当前的 hash 中,然后 `*` 引用了锚点(还是`job_configuration`)。这个例子的扩展版本是:
给定散列到当前的散列中,”并且 `*` 包括命名锚
(再次`job_configuration`)。这个例子的扩展版本是:
```yaml ```yaml
.job_template: .job_template:
图片:红宝石:2.6 image: ruby:2.6
服务: services:
- postgres - postgres
- Redis - redis
测试1: test1:
图片:红宝石:2.6 image: ruby:2.6
服务: services:
- postgres - postgres
- Redis - redis
脚本: script:
- test1 项目 - test1 project
测试2: test2:
图片:红宝石:2.6 image: ruby:2.6
服务: services:
- postgres - postgres
- Redis - redis
脚本: script:
- 测试2项目 - test2 project
`` ```
你可以使用锚点来定义两组服务。例如,`test:postgres` 你可以使用锚点来定义两组不同的服务。例如,`test:postgres`和 `test:mysql` ,他们共享 `.job_template` 中定义的 `script`,但使用不同的 `services`,可以这样定义 `.postgres_services` 和 `.mysql_services` :
和 `test:mysql` 共享 `.job_template` 中定义的 `script`,但使用不同的
`services`,在 `.postgres_services` 和 `.mysql_services` 中定义:
```yaml ```yaml
.job_template: &job_configuration .job_template: &job_configuration
脚本: script:
- 测试项目 - test project
标签: tags:
- 开发 - dev
.postgres_services: .postgres_services:
服务:&postgres_configuration services: &postgres_configuration
- postgres - postgres
- 红宝石 - ruby
.mysql_services: .mysql_services:
服务:&mysql_configuration services: &mysql_configuration
- mysql - mysql
- 红宝石 - ruby
测试:postgres: test:postgres:
<<: *job_configuration <<: *job_configuration
服务:*postgres_configuration services: *postgres_configuration
标签: tags:
- postgres - postgres
测试:mysql: test:mysql:
<<: *job_configuration <<: *job_configuration
服务:*mysql_configuration services: *mysql_configuration
`` ```
扩展版本是: 上面这个例子的扩展版本是:
```yaml ```yaml
.job_template: .job_template:
脚本: script:
- 测试项目 - test project
标签: tags:
- 开发 - dev
.postgres_services: .postgres_services:
服务: services:
- postgres - postgres
- 红宝石 - ruby
.mysql_services: .mysql_services:
服务: services:
- mysql - mysql
- 红宝石 - ruby
测试:postgres: test:postgres:
脚本: script:
- 测试项目 - test project
服务: services:
- postgres - postgres
- 红宝石 - ruby
标签: tags:
- postgres - postgres
测试:mysql: test:mysql:
脚本: script:
- 测试项目 - test project
服务: services:
- mysql - mysql
- 红宝石 - ruby
标签: tags:
- 开发 - dev
`` ```
你可以看到隐藏的流水线任务可以方便地用作模板,并且
`tags: [postgres]` 覆盖 `tags: [dev]`。
#### 脚本的 YAML 锚点 你可以看到将隐藏的流水线任务用作模板时使用起来非常方便,并且 `tags: [postgres]` 覆盖 `tags: [dev]`。
> [介绍](https://gitlab.com/gitlab-org/gitlab/-/issues/23005) 在 GitLab 12.5 中。 #### 脚本的 YAML 锚点[](#yaml-anchors-for-variables)
你可以将 [YAML 锚点](#anchors) 与 [script](#script)、[`before_script`](#before_script)、 你可以在 [script](#script)、[`before_script`](#before_script)、以及 [`after_script`](#after_script) 中使用 [YAML 锚点](#anchors) ,让其在多个流水线任务中使用预定义的命令:
和 [`after_script`](#after_script) 在多个流水线任务中使用预定义的命令:
```yaml ```yaml
.some-script-before: &some-script-before .some-script-before: &some-script-before
- echo "先执行这个脚本" - echo "Execute this script first"
.some-script: &some-script .some-script: &some-script
- echo "第二次执行这个脚本" - echo "Execute this script second"
- echo "也执行这个脚本" - echo "Execute this script too"
.some-script-after: &some-script-after .some-script-after: &some-script-after
- echo "最后执行这个脚本" - echo "Execute this script last"
工作1: job1:
之前_脚本: before_script:
- *some-script-before - *some-script-before
脚本: script:
- *一些脚本 - *some-script
- echo "执行某事,仅针对这项工作" - echo "Execute something, for this job only"
后脚本: after_script:
- *some-script-after - *some-script-after
工作2: job2:
脚本: script:
- *some-script-before - *some-script-before
- *一些脚本 - *some-script
- echo "执行其他操作,仅针对此工作" - echo "Execute something else, for this job only"
- *some-script-after - *some-script-after
`` ```
#### 变量的 YAML 锚点 #### 变量的 YAML 锚点
使用 [YAML 锚点](#anchors) 和 `variables` 重复赋值 使用 [YAML 锚点](#anchors) 和 `variables` 给跨多个流水线任务的变量重复赋值。当流水线任务需要一个特定的 `variables` 块时,你也可以使用 YAML 锚点,以避免会覆盖全局变量。
跨多个流水线任务的变量。你还可以在流水线任务时使用 YAML 锚点
需要一个特定的 `variables` 块,否则会覆盖全局变量。
以下示例显示如何在不影响的情况下覆盖 `GIT_STRATEGY` 变量 以下示例显示如何在不影响 `SAMPLE_VARIABLE` 变量使用的情况下覆盖 `GIT_STRATEGY` 变量:
`SAMPLE_VARIABLE` 变量的使用:
```yaml ```yaml
# 全局变量 # global variables
变量:&全局变量 variables: &global-variables
SAMPLE_VARIABLE:sample_variable_value SAMPLE_VARIABLE: sample_variable_value
ANOTHER_SAMPLE_VARIABLE:another_sample_variable_value ANOTHER_SAMPLE_VARIABLE: another_sample_variable_value
# 一个必须设置 GIT_STRATEGY 变量但依赖于全局变量的流水线任务 # a job that must set the GIT_STRATEGY variable, yet depend on global variables
job_no_git_strategy: job_no_git_strategy:
阶段:清理 stage: cleanup
变量: variables:
<<: *全局变量 <<: *global-variables
GIT_STRATEGY:无 GIT_STRATEGY: none
脚本:echo $SAMPLE_VARIABLE script: echo $SAMPLE_VARIABLE
`` ```
### 隐藏工作 ### 隐藏的流水线任务
如果你想暂时禁用一个流水线任务,而不是注释掉所有的 如果你想暂时禁用一个流水线任务,并且不希望使用注释掉所有的定义流水线任务的行这种方式:
定义流水线任务的行:
```yaml ```yaml
# hidden_​​job: # hidden_job:
# 脚本: # script:
# - 运行测试 # - run test
`` ```
相反,你可以用一个点(`.`)开始它的名字,它不会被处理 这样情况下,你可以用一个点(`.`)开始它的名字,它不会被 CI/CD 处理。在下面的例子中,`.hidden_​​job` 将被忽略:
亚搏体育应用 CI/CD。在下面的例子中,`.hidden_​​job` 被忽略:
```yaml ```yaml
.hidden_​​job: .hidden_job:
脚本: script:
- 运行测试 - run test
`` ```
使用此功能忽略流水线任务,或使用
[YAML-specific features](#yaml-specific-features) 并转换隐藏流水线任务
成模板。
### `!reference` 标签 使用此功能来忽略流水线任务,或使用 YAML-specific 特性功能将隐藏流水线任务转换成模板。
> - [介绍](https://gitlab.com/gitlab-org/gitlab/-/issues/266173) 在 GitLab 13.9 中。 ### `!reference` tags
使用 `!reference` 自定义 YAML 标签从其他流水线任务中选择关键字配置 使用 `!reference` 自定义 YAML 标签,可以从其他流水线任务中选择关键字配置部分并在当前部分中重用它。与 [YAML 锚点](#anchors) 不同,你可以使用 `!reference` 标签重用 [included](#include) 配置,包括其中的配置文件也可以重用。
部分并在当前部分中重用它。与 [YAML 锚点](#anchors) 不同,你可以
使用 `!reference` 标签重用 [included](#include) 配置中的配置
文件也是如此。
在以下示例中,来自两个不同位置的 `script` 和一个 `after_script` 是 在以下示例中,来自两个不同位置的 `script` 和 `after_script` 在 `test` 流水线任务中被重用:
在 `test` 流水线任务中重用:
- `setup.yml`: - `setup.yml`:
```yaml ```yaml
。设置: .setup:
脚本: script:
- echo 创建环境 - echo creating environment
`` ```
-`.codechina-ci.yml`: - `.codechina-ci.yml`:
```yaml ```yaml
包括: include:
- 本地:setup.yml - local: setup.yml
。拆除: .teardown:
后脚本: after_script:
- echo 删除环境 - echo deleting environment
测试: test:
脚本: script:
- !reference [.setup, script] - !reference [.setup, script]
- echo 运行我自己的命令 - echo running my own command
后脚本: after_script:
- !reference [.teardown, after_script] - !reference [.teardown, after_script]
`` ```
在下面的例子中,`test-vars-1` 重用了 `.vars` 中的所有变量,而 `test-vars-2` 在下面的例子中,`test-vars-1` 重用了 `.vars` 中的所有变量,而 `test-vars-2` 选择一个特定的变量并将其作为新的 `MY_VAR` 变量重用。
选择一个特定的变量并将其作为新的“MY_VAR”变量重用。
```yaml ```yaml
.vars: .vars:
变量: variables:
网址:“http://my-url.internal” URL: "http://my-url.internal"
IMPORTANT_VAR:“详细信息” IMPORTANT_VAR: "the details"
测试变量-1: test-vars-1:
变量:!reference [.vars, variables] variables: !reference [.vars, variables]
脚本: script:
- 打印环境 - printenv
测试变量 2: test-vars-2:
变量: variables:
MY_VAR: !reference [.vars, variables, IMPORTANT_VAR] MY_VAR: !reference [.vars, variables, IMPORTANT_VAR]
脚本: script:
- 打印环境 - printenv
`` ```
你不能重复使用已经包含 `!reference` 标签的部分。只有一层 你不能重复使用已经包含 `!reference` 标签的部分。只支持一层嵌套。
支持嵌套。
## 跳过流水线 ## 跳过流水线
要在不触发流水线的情况下推送提交,请添加 `[ci skip]` 或 `[skip ci]`,使用任何 要在不触发流水线的情况下推送提交,请在你的提交消息中添加 `[ci skip]` 或 `[skip ci]`,支持大写。
大写,到你的提交消息。
或者,如果你使用 Git 2.10 或更高版本,请使用 `ci.skip` [Git push option](../../user/project/push_options.md#push-options-for-gitlab-cicd)。 或者,如果你使用 Git 2.10 或更高版本,请使用 `ci.skip` Git push option。`ci.skip` 推送选项不会跳过合并请求流水线。
`ci.skip` 推送选项不会跳过合并请求
流水线。
## 处理 Git 推送 ## 处理 Git 推送
GitLab 在以下情况下最多创建四个分支和标记流水线 当在单个 `git push` 调用中推送多个更改时,系统将最多创建四个分支流水线或 tag 流水线。
在单个 `git push` 调用中推送多个更改。
此限制不会影响任何更新的合并请求流水线。 此限制不会影响任何更新的合并请求流水线。所有更新的合并请求在创建时都使用的是合并请求流水线的流水线。
所有更新的合并请求都在使用时创建了一个流水线
[合并请求的流水线](../merge_request_pipelines/index.md)。
## 弃用的关键字 ## 弃用的关键字
...@@ -4264,34 +4007,28 @@ GitLab 在以下情况下最多创建四个分支和标记流水线 ...@@ -4264,34 +4007,28 @@ GitLab 在以下情况下最多创建四个分支和标记流水线
### 全局定义的`types` ### 全局定义的`types`
警告: > 警告:`types` 已弃用,可能会在未来版本中删除。请使用 [`stages`](#stages) 代替。
`types` 已弃用,可能会在未来版本中删除。
使用 [`stages`](#stages) 代替。
### 流水线任务定义的`type` ### 流水线任务定义的`type`
警告: > 警告:`type` 已弃用,可能会在未来的某一版本中删除。请使用 [`stage`](#stage) 代替。
`type` 已弃用,可能会在未来版本之一中删除。
使用 [`stage`](#stage) 代替。
### 全局定义的`image`、`services`、`cache`、`before_script`、`after_script` ### 全局定义的`image`、`services`、`cache`、`before_script`、`after_script`
定义 `image`、`services`、`cache`、`before_script` 和 不推荐使用全局定义的 `image`、`services`、`cache`、`before_script` 和 `after_script`。可能会在未来版本中删除。
全局不推荐使用 `after_script`。可以删除支持
从未来的版本。
使用 [`default:`](#custom-default-keyword-values) 代替。例如: 使用 [`default:`](#custom-default-keyword-values) 代替。例如:
```yaml ```yaml
默认: default:
图像:红宝石:3.0 image: ruby:3.0
服务: services:
- 码头工人:dind - docker:dind
缓存: cache:
路径:[供应商/] paths: [vendor/]
之前_脚本: before_script:
- 捆绑配置设置路径供应商/捆绑 - bundle config set path vendor/bundle
- 捆绑安装 - bundle install
后脚本: after_script:
- rm -rf tmp - rm -rf tmp/
``` ```
\ No newline at end of file
渝ICP备2023009037号

京公网安备11010502055752号

网络110报警服务 Powered by GitLab CE v13.7
开源知识
Git 入门 Pro Git 电子书 在线学 Git
Markdown 基础入门 IT 技术知识开源图谱
帮助
使用手册 反馈建议 博客
《GitCode 隐私声明》 《GitCode 服务条款》 关于GitCode
Powered by GitLab CE v13.7