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_ID
CI_JOB_ID
CI_JOB_TOKEN
CI_BUILD_ID
CI_BUILD_TOKEN
CI_REGISTRY_USER
CI_REGISTRY_PASSWORD
CI_REPOSITORY_URL
CI_DEPLOY_USER
CI_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'