Where variables can be used
原文:https://docs.gitlab.com/ee/ci/variables/where_variables_can_be_used.html
Where variables can be used
如CI / CD 变量文档中所述,您可以定义许多不同的变量. 其中一些可用于所有 GitLab CI / CD 功能,但其中某些功能或多或少受到限制.
本文档描述了在何处以及如何使用不同类型的变量.
Variables usage
有两个地方可以使用定义的变量. 在:
- GitLab 端,位于
.gitlab-ci.yml. - 跑步者方面,位于
config.toml.
.gitlab-ci.yml file
| Definition | 可以扩大吗? | 扩展地点 | Description |
|---|---|---|---|
environment:url |
yes | GitLab | 变量扩展由 GitLab 的内部变量扩展机制完成 . |
支持为作业定义的所有变量(项目/组变量, .gitlab-ci.yml中的变量,触发器中的变量,管道计划中的变量).
不支持在 Runner 的config.toml定义的变量和在 job 的script创建的变量. |
| environment:name | yes | GitLab | 与environment:url相似,但是变量扩展不支持以下内容:
-基于环境名称的变量( CI_ENVIRONMENT_NAME , CI_ENVIRONMENT_SLUG ).
-与环境相关的任何其他变量(当前仅CI_ENVIRONMENT_URL ).
- 持久变量 . |
|
resource_group| yes | GitLab | 与environment:url相似,但是变量扩展不支持以下内容:
-基于环境名称的变量( CI_ENVIRONMENT_NAME , CI_ENVIRONMENT_SLUG ).
-与环境相关的任何其他变量(当前仅CI_ENVIRONMENT_URL ).
- 持久变量 . |
|
variables| yes | Runner | 变量扩展由 GitLab Runner 的内部变量扩展机制完成 | |image| yes | Runner | 变量扩展由 GitLab Runner 的内部变量扩展机制完成 | |services:[]| yes | Runner | 变量扩展由 GitLab Runner 的内部变量扩展机制完成 | |services:[]:name| yes | Runner | 变量扩展由 GitLab Runner 的内部变量扩展机制完成 | |cache:key| yes | Runner | 变量扩展由 GitLab Runner 的内部变量扩展机制完成 | |artifacts:name| yes | Runner | 变量扩展由 GitLab Runner 的外壳环境完成 | |script,before_script,after_script| yes | 脚本执行外壳 | 变量扩展由执行外壳环境进行 | |only:variables:[],except:variables:[]| no | n/a | 变量必须采用$variable的形式. 以下不支持:
-基于环境名称的变量( CI_ENVIRONMENT_NAME , CI_ENVIRONMENT_SLUG ).
-与环境相关的任何其他变量(当前仅CI_ENVIRONMENT_URL ).
- 持久变量 . |
config.toml file
注意:您可以在Runner 的 docs 中阅读有关config.toml更多信息.
| Definition | 可以扩大吗? | Description |
|---|---|---|
runners.environment |
yes | 变量扩展由 Runner 的内部变量扩展机制完成 |
runners.kubernetes.pod_labels |
yes | 变量扩展由 Runner 的内部变量扩展机制完成 |
runners.kubernetes.pod_annotations |
yes | 变量扩展由 Runner 的内部变量扩展机制完成 |
Expansion mechanisms
共有三种扩展机制:
- GitLab
- 亚搏体育 app Runner
- 执行外壳环境
GitLab internal variable expansion mechanism
扩展部分需要采用$variable或${variable}或%variable% . 每种格式都以相同的方式处理,无论最终由哪个 OS / shell 处理,因为扩展是在任何 Runner 获得该工作之前在 GitLab 中完成的.
GitLab Runner internal variable expansion mechanism
- 支持:项目/组变量,
.gitlab-ci.yml变量,config.toml变量以及触发器,管道计划和手动管道中的变量. - 不支持:在脚本内部定义的变量(例如,
export MY_VARIABLE="test").
跑步者使用 Go 的os.Expand()方法进行变量扩展. 这意味着它将仅处理定义为$variable和${variable} . 同样重要的是,扩展只能执行一次,因此嵌套变量可能会或可能不会起作用,这取决于变量定义的顺序.
Execution shell environment
这是script执行期间发生的扩展. 它的工作方式取决于所使用的 shell( bash , sh , cmd ,PowerShell). 例如,如果作业的script包含行echo $MY_VARIABLE-${MY_VARIABLE_2} ,则应由 bash / sh 正确处理(保留空字符串或某些值,具体取决于是否定义了变量),但不适用于 Windows 的cmd或 PowerShell,因为这些外壳使用不同的变量语法.
Supported:
- 该
script可以使用外壳默认的所有可用变量(例如,应在所有 bash / sh 外壳中包含的$PATH)以及 GitLab CI / CD 定义的所有变量(项目/组变量,.gitlab-ci.yml变量,config.toml变量以及触发器和管道计划中的变量). - 该
script还可以使用前面各行中定义的所有变量. 因此,例如,如果您定义变量export MY_VARIABLE="test":- 在
before_script,这将在以下几行工作before_script和相关的所有行script. - 在
script,它将在以下script行中工作. - 在
after_script,它将在after_script以下行中after_script.
- 在
对于after_script脚本,它们可以:
- 仅在同一
after_script部分中使用在脚本之前定义的变量. - 不要使用在
before_script和script定义的变量.
这些限制是因为after_script脚本在单独的 shell 上下文中执行.
Persisted variables
注意:一些持久变量包含令牌,由于安全原因,某些定义不能使用它们.
以下变量称为"持久":
CI_PIPELINE_IDCI_JOB_IDCI_JOB_TOKENCI_BUILD_IDCI_BUILD_TOKENCI_REGISTRY_USERCI_REGISTRY_PASSWORDCI_REPOSITORY_URLCI_DEPLOY_USERCI_DEPLOY_PASSWORD
他们是:
Variables with an environment scope
支持使用环境范围定义的变量. 鉴于在review/staging/*范围内定义了一个变量$STAGING_SECRET ,将基于匹配的变量表达式创建以下使用动态环境的作业:
my-job:
stage: staging
environment:
name: review/$CI_JOB_STAGE/deploy
script:
- 'deploy staging'
only:
variables:
- $STAGING_SECRET == 'something'