1. 变量的高级用法
1.1 环境变量的优先级
变量的优先级顺序(从最高到最低):
- 触发变量或计划的管道变量
- 项目级变量
- 组级变量
- YAML 中定义的作业级变量
- YAML 中定义的全局变量
- 预定义的环境变量
//定义全局和作业变量
variables:
CI_REGISTRY: harbor1.xiodi.cn
test_variable:
stage: test
tags:
- host20133-docker
variables:
CI_REGISTRY: harbor2.xiodi.cn
script:
- echo $CI_REGISTRY
//再分别创建组级变量、项目级变量,计划的管道变量进行测试
1.2 受保护和隐藏变量
- 受保护:该变量只能运用于受保护的分支或tag
- 隐藏:可以在作业日志中隐藏该值,但必须符合一定的正则表达式要求
隐藏必须符合的正则表达式规则:
- 必须在一行
- 只能包含 Base64字母(RFC4648)中的字符
- 在 GitLab 12.2 以上的版本,
@
和:
也是有效的值 - 必须至少包含8个字符
- 不能使用变量
[info] Base64 参考:https://zh.wikipedia.org/wiki/Base64 ,其实就是 A-Z,a-z,0-9,另外两个两个字符根据操作系统的不同而不同。
(1) 受保护
test_variable:
stage: test
tags:
- host20133-docker
script:
- echo $PROJECT_TEST
(2) 隐藏
test_variable:
stage: test
tags:
- host20133-docker
script:
- echo $HARBOR_PW
1.3 环境变量表达式
在 .gitlab-ci.yml 中,可以将变量表达式与策略一起使用。通过这种方法,可以将代码推送到 GitLab 之后限制将在管道中创建哪些作业。
variables:
RELEASE: staging
test:
tags:
- host20133-docker
script:
- echo "project deploy"
only:
variables:
- $RELEASE == "project"
deploy:
tags:
- host20133-docker
script: echo "staging deploy"
only:
variables:
- $RELEASE
(1)支持的语法
使用字符串进行相等匹配
$VARIABLE == "some value"
$VARIABLE != "some value" //在GitLab 11.11中引入
"some value" == $VARIABLE //这种写法也是正确的
检查未定义的值
$VARIABLE == null
$VARIABLE != null //在GitLab 11.11中引入
检查空变量
$VARIABLE == ""
$VARIABLE != "" //在GitLab 11.11中引入
[info]检查空变量,指的是,已经定义该变量,但是值为空。
比较两个变量
$VARIABLE_1 == $VARIABLE_2
$VARIABLE_1 != $VARIABLE_2 //在GitLab 11.11中引入
可变状态检查
$STAGING //直接使用变量名作为表达式
[info] 可变状态检查,如果变量值包含空格字符,它不是空变量。
模式匹配
$VARIABLE =~ /^content.*/
$VARIABLE_1 !~ /^content.*/ //在GitLab 11.11中引入,未找到匹配项,则为真
运算符,GitLab 12.0引入
$VARIABLE1 =~ /^content.*/ && $VARIABLE2 == "something"
$VARIABLE1 =~ /^content.*/ && $VARIABLE2 =~ /thing$/ && $VARIABLE3
$VARIABLE1 =~ /^content.*/ || $VARIABLE2 =~ /thing$/ && $VARIABLE3
运算符优先级遵循 Ruby 2.5:https://ruby-doc.org/core-2.5.0/doc/syntax/precedence_rdoc.html