... | ... | @@ -6,14 +6,9 @@ |
|
|
|
|
|
变量对于在 CODECHINA CI/CD 中自定义流水线任务很有用。 使用变量时,不必对值进行硬编码。
|
|
|
|
|
|
> 有关 CODECHINA CI/CD 高级使用的更多信息:
|
|
|
>
|
|
|
> * 通过 CODECHINA 工程师共享的这[7 种高级 GitLab CI 工作流程黑客,](https://about.gitlab.com/webcast/7cicd-hacks/)可以更快地提高生产力。
|
|
|
> * 了解云原生计算基金会(CNCF)如何通过 GitLab CI/CD 消除许多云提供商之间管理项目[的复杂性](https://about.gitlab.com/customers/cncf/) 。
|
|
|
|
|
|
## 预定义的 CI/CD 变量[](#predefined-environment-variables "Permalink")
|
|
|
|
|
|
CODECHINA CI/CD 具有一组[默认的预定义变量](predefined_variables.html) ,你可以使用它们而无需任何其他说明。 你可以调用问题编号、用户名、分支名称、流水线和提交 ID 等。
|
|
|
CODECHINA CI/CD 具有一组[默认的预定义变量](https://codechina.csdn.net/help/ci/variables/predefined_variables.html) ,你可以使用它们而无需任何其他说明。 你可以调用问题编号、用户名、分支名称、流水线和提交 ID 等。
|
|
|
|
|
|
CODECHINA 为 Runner 的本地环境提供了预定义的变量。
|
|
|
|
... | ... | @@ -36,26 +31,15 @@ test_variable: |
|
|
|
|
|
在这种情况下, runner 输出流水线任务`test_variable`的`stage` ,即`test` :
|
|
|
|
|
|
[![Output `$CI_JOB_STAGE`](img/b6a9c5aa2e348263baf61cb961ac802f.png)](img/ci_job_stage_output_example.png)
|
|
|
|
|
|
再举一个例子,假设你使用自己的 CODECHINA 实例,并且想知道 CODECHINA 页面在哪个域下提供服务。 你可以通过在脚本中使用预定义变量`$CI_PAGES_DOMAIN`来调用它:
|
|
|
|
|
|
```
|
|
|
pages:
|
|
|
script:
|
|
|
- ...
|
|
|
- echo $CI_PAGES_DOMAIN
|
|
|
```
|
|
|
|
|
|
对于 GitLab.com 用户,输出将为`gitlab.io` 。 对于你的私有实例,输出将是你的系统管理员定义的任何内容。
|
|
|
[![Output `$CI_JOB_STAGE`](/docs/img/ci_job_stage_output_example.png)](/docs/img/ci_job_stage_output_example.png)
|
|
|
|
|
|
## 自定义 CI/CD 变量[](#custom-environment-variables "Permalink")
|
|
|
|
|
|
当需要特定的自定义环境变量时,可以[在 UI](#create-a-custom-variable-in-the-ui)、[API](../../api/project_level_variables.html)或直接[在`.codechina-ci.yml`文件中进行设置](#create-a-custom-variable-in-ciyml) 。
|
|
|
当需要特定的自定义环境变量时,可以[在 UI](#create-a-custom-variable-in-the-ui)、API 或直接[在`.codechina-ci.yml`文件中进行设置](#create-a-custom-variable-in-ciyml) 。
|
|
|
|
|
|
每当流水线运行时,Runner 就会使用这些变量。 你还[可以手动覆盖特定流水线的变量值](../pipelines/index.html#specifying-variables-when-running-manual-jobs) 。
|
|
|
每当流水线运行时,Runner 就会使用这些变量。 你还可以手动覆盖特定流水线的变量值。
|
|
|
|
|
|
变量有两种类型: **Variable**和**File** 。 你无法在`.codechina-ci.yml`文件中设置类型,但可以在 UI 和 API 中进行设置。
|
|
|
变量有两种类型:**Variable** 和 **File** 。 你无法在`.codechina-ci.yml`文件中设置类型,但可以在 UI 和 API 中进行设置。
|
|
|
|
|
|
### 在 `.codechina-ci.yml` 创建自定义变量[](#create-a-custom-variable-in-ciyml "Permalink")
|
|
|
|
... | ... | @@ -79,8 +63,9 @@ variables: |
|
|
|
|
|
在用户界面中,你可以添加或更新自定义环境变量:
|
|
|
|
|
|
1。 转到项目的**设置> DevOps**,然后展开 **变量**部分。
|
|
|
2。 单击**添加变量**按钮。 在" **添加变量**模式"中,填写详细信息:
|
|
|
1. 转到项目的**设置> DevOps**,然后展开 **变量**部分。
|
|
|
|
|
|
2. 单击**添加变量**按钮。 在 **添加变量** 模式中,填写详细信息:
|
|
|
|
|
|
* **键** :必须是一行,没有空格,只能使用字母、数字或`_` 。
|
|
|
* **值** :无限制。
|
... | ... | @@ -105,7 +90,7 @@ test_variable: |
|
|
|
|
|
输出将是:
|
|
|
|
|
|
[![Output custom variable](img/4401376aa4e3f3764851b2dbb25f6f2e.png)](img/custom_variables_output.png)
|
|
|
[![Output custom variable](/docs/img/custom_variables_output.png)](/docs/img/custom_variables_output.png)
|
|
|
|
|
|
### 变量类型的自定义环境变量[](#custom-environment-variables-of-type-variable "Permalink")
|
|
|
|
... | ... | @@ -168,7 +153,7 @@ kubectl config set-cluster e2e --server="$KUBE_URL" --certificate-authority="$KU |
|
|
|
|
|
要保护变量:
|
|
|
|
|
|
1. 转到**设置> CI / CD** 。
|
|
|
1. 转到**设置> DevOps** 。
|
|
|
2. 展开**变量**部分。
|
|
|
3. 在你要保护的变量旁边,点击**编辑** 。
|
|
|
4. 选择**保护变量**复选框。
|
... | ... | @@ -341,13 +326,13 @@ script: |
|
|
1. 导航到项目的**设置> DevOps**页面。
|
|
|
2. 展开**变量**部分。
|
|
|
|
|
|
[![CI/CD settings - inherited variables](img/bcbedbd56c50879eb35c2fc2f534d693.png)](img/inherited_group_variables_v12_5.png)
|
|
|
[![CI/CD settings - inherited variables](/docs/img/inherited_group_variables.png)](/docs/img/inherited_group_variables_v12_5.png)
|
|
|
|
|
|
## 实例级 CI/CD 环境变量[](#instance-level-cicd-environment-variables "Permalink")
|
|
|
|
|
|
实例变量非常有用,因为不再需要为所有项目重复手动输入相同的凭据。 实例级变量可用于实例上的所有项目和组。
|
|
|
|
|
|
**注意:**实例级变量的最大数量为 25。
|
|
|
**注意**:实例级变量的最大数量为 25。
|
|
|
|
|
|
你可以通过 UI 或 API 定义实例级变量。
|
|
|
|
... | ... | @@ -358,7 +343,7 @@ script: |
|
|
|
|
|
* **键** :必须为一行,只能使用字母,数字或`_` (下划线),且不能有空格。
|
|
|
* **值** :允许 10000 个字符。
|
|
|
* **类型**: `File` or `Variable`。
|
|
|
* **类型**: `File` o或 `Variable`。
|
|
|
* **保护变量** (可选):如果选中,则该变量将仅在在受保护的分支或标签上运行的流水线中可用。
|
|
|
* **屏蔽变量** (可选):如果选中,则变量的**值**将不会显示在流水线任务日志中。 如果该值不满足[屏蔽要求,](#masked-variable-requirements)则不会保存该变量。
|
|
|
|
... | ... | @@ -366,7 +351,7 @@ script: |
|
|
|
|
|
### 启用或禁用实例级 CI/CD 变量的 UI 界面[](#enable-or-disable-ui-interface-for-instance-level-cicd-variables "Permalink")
|
|
|
|
|
|
实例级 CI/CD 变量的 UI 界面正在开发中,但可用于生产环境。 它部署在**默认情况下启用**的功能标志的后面。 [有权访问 GitLab Rails 控制台的 GitLab 管理员](../../administration/feature_flags.html)可以选择为你的实例禁用它。
|
|
|
实例级 CI/CD 变量的 UI 界面正在开发中,但可用于生产环境。 它部署在**默认情况下启用**的功能标志的后面。 有权访问 GitLab Rails 控制台的 GitLab 管理员可以选择为你的实例禁用它。
|
|
|
|
|
|
禁用它:
|
|
|
|
... | ... | @@ -384,7 +369,7 @@ Feature.enable(:instance_variables_ui) |
|
|
|
|
|
你可以从相关流水线任务中继承环境变量。
|
|
|
|
|
|
该功能利用了[`artifacts:reports:dotenv`](../pipelines/job_artifacts.html#artifactsreportsdotenv)报告功能。
|
|
|
该功能利用了`artifacts:reports:dotenv`报告功能。
|
|
|
|
|
|
带有[`dependencies`](/docs/ci/yaml#dependencies)关键字的示例。
|
|
|
|
... | ... | @@ -435,8 +420,8 @@ deploy: |
|
|
2. 项目级 [变量](#custom-environment-variables) 或[受保护变量](#protect-a-custom-variable)。
|
|
|
3. 组织级 [变量](#group-level-environment-variables)或[受保护变量](#protect-a-custom-variable)。
|
|
|
4. [继承环境变量](#inherit-environment-variables)。
|
|
|
5. YAML定义的 [流水线任务级变量](../yaml/README.html#variables)。
|
|
|
6. YAML定义的 [全局变量](../yaml/README.html#variables)。
|
|
|
5. YAML定义的 [流水线任务级变量](/docs/ci/yaml#variables)。
|
|
|
6. YAML定义的 [全局变量](/docs/ci/yaml/#variables)。
|
|
|
7. [部署变量](#deployment-environment-variables)。
|
|
|
8. 预定义环境变量。
|
|
|
|
... | ... | @@ -467,7 +452,7 @@ deploy: |
|
|
|
|
|
然后,这些前缀变量将在运行的应用程序容器上用作环境变量。
|
|
|
|
|
|
**警告:**由于当前 Auto DevOps 脚本环境的限制,当前不支持具有多行值的变量。
|
|
|
**警告**:由于当前 Auto DevOps 脚本环境的限制,当前不支持具有多行值的变量。
|
|
|
|
|
|
### 通过手动运行流水线覆盖变量[](#override-a-variable-by-manually-running-a-pipeline "Permalink")
|
|
|
|
... | ... | @@ -475,13 +460,13 @@ deploy: |
|
|
|
|
|
例如,假设你添加了一个名为`$TEST`的自定义变量,并且想在手动流水线中覆盖它。
|
|
|
|
|
|
导航到项目的**CI/CD> 流水线** ,然后单击**运行 流水线** 。 选择要为其运行流水线的分支,然后在 UI 中添加变量及其值:
|
|
|
导航到项目的**DevOps > 流水线** ,然后单击**运行 流水线** 。 选择要为其运行流水线的分支,然后在 UI 中添加变量及其值:
|
|
|
|
|
|
[![Override variable value](/docs/img/override_variable_manual_pipeline.png)](/docs/img/override_variable_manual_pipeline.png)
|
|
|
|
|
|
runner 将覆盖先前设置的值,并将自定义值用于此特定流水线。
|
|
|
|
|
|
[![Manually overridden variable output](img/e392f78e991a2b0865f4a2fe825fd7fc.png)](img/override_value_via_manual_pipeline_output.png)
|
|
|
[![Manually overridden variable output](/docs/img/override_value_via_manual_pipeline_output.png)](/docs/img/override_value_via_manual_pipeline_output.png)
|
|
|
|
|
|
## CI/CD 变量表达式[](#environment-variables-expressions "Permalink")
|
|
|
|
... | ... | @@ -490,7 +475,7 @@ runner 将覆盖先前设置的值,并将自定义值用于此特定流水线 |
|
|
在`.codechina-ci.yml` ,变量表达式可同时用于以下两种情况:
|
|
|
|
|
|
* [`rules`](/docs/ci/yaml#rules) ,这是推荐的方法,以及
|
|
|
* [`only`和`except`](/docs/ci/yaml#onlyexcept-basic) ,它们是不推荐使用的候选对象。
|
|
|
* [`only`和`except`](/docs/ci/yaml#only--except) ,它们是不推荐使用的候选对象。
|
|
|
|
|
|
与变量和触发的流水线变量结合使用时,这特别有用。
|
|
|
|
... | ... | @@ -508,7 +493,7 @@ deploy: |
|
|
|
|
|
如果`only`使用时`variables`任何条件评估为 true,则会创建一个新流水线任务。 如果在使用`except`任何表达式的结果为 true,则不会创建流水线任务。
|
|
|
|
|
|
这遵循[`only` / `except`策略](/docs/ci/yaml#onlyexcept-advanced)的常规规则。
|
|
|
这遵循[`only` / `except`策略](/docs/ci/yaml#only--except)的常规规则。
|
|
|
|
|
|
### CI/CD 变量表达式的语法[](#syntax-of-environment-variable-expressions "Permalink")
|
|
|
|
... | ... | @@ -595,7 +580,7 @@ deploy_staging: |
|
|
- if: '$RELEASE =~ $STAGINGRELS'
|
|
|
```
|
|
|
|
|
|
**注意:**可用的正则表达式语法受到限制。
|
|
|
**注意**:可用的正则表达式语法受到限制。
|
|
|
|
|
|
如果需要,你可以使用测试流水线来确定正则表达式是否可以在变量中工作。 下面的示例直接从变量内部测试`^mast.*`正则表达式:
|
|
|
|
... | ... | |