GitLab 变量的介绍与使用
环境变量是一个动态命名的值,它可以影响正在运行的进程在操作系统上的行为方式。
一、环境变量分类
在 GitLab CI/CD 中,环境变量分为两部分:
预定义环境变量
自定义环境变量
1.1 预定义环境变量
GitLab CI/CD 具有一组默认的环境变量,您可以不需要任何定义,就可直接使用,比如问题编号,用户名,分支名称,管道和提交ID等。
预定义变量参考:https://docs.gitlab.com/12.10/ee/ci/variables/predefined_variables.html
1.2 自定义环境变量
在 GitLab 11.11 中引入
GitLab 支持两种类型的变量:
变量类型
文件类型
二、变量使用
2.1 使用预定义的环境变量
//示例
stages: - dump - build - deploy tools:dump: stage: dump script: - echo $CI_BUILD_TAG - echo $CI_BUILD_REF_NAME - echo $CI_BUILD_NAME - echo $CI_BUILD_TRIGGERED
2.2 创建一个自定义环境变量
创建自定义环境变量有两种方式:
.gitlab-ci.yml
gitlab UI 页面
项目变量
组变量
(1)通过 UI 定义
组变量
: 组页面 -> 设置 -> CI/CD -> 变量
项目变量
:设置 -> CI/CD -> 变量
(2) .gitlab-ci.yml 中定义
在 .gitlab-ci.yml 中定义变量,可以在两个地方,全局和job中
variables: TEST: "HELLO WORLD" job1: variables: TEST2: "HELLO WORLD2"
2.3 变量使用示例
//gitlab-ci.yml
variables: MAVEN_REPOS: maven-repos-volume PROJECT_NAME:service_web PROJECT_GROUP_NAME: wms WAR_PATH: web-server PROJECT_TARGET: $PROJECT_NAME-target-$CI_COMMIT_REF_NAME-$CI_PIPELINE_ID #runner服务器存放打包后代码路径变量定义 ALI_DOCKER_IMAGE_TAG: $ALI_REGISTRY/xteapp-$PROJECT_GROUP_NAME- $PROJECT_NAME:$CI_BUILD_REF_NAME #build镜像标签名称 stages: - dump - build - deploy tools:dump: stage: dump script: - echo $CI_BUILD_TAG - echo $CI_BUILD_REF_NAME - echo $CI_BUILD_NAME - echo $CI_BUILD_TRIGGERED - echo $REGISTRY - echo $PROJECT_TARGET
三、变量的高级用法
3.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
//再分别创建组级变量、项目级变量,计划的管道变量进行测试
3.2 受保护和隐藏变量
受保护:该变量只能运用于受保护的分支或tag
隐藏:可以在作业日志中隐藏该值,但必须符合一定的正则表达式要求
隐藏必须符合的正则表达式规则:
必须在一行
只能包含 Base64字母(RFC4648)中的字符
在 GitLab 12.2 以上的版本,
@
和:
也是有效的值必须至少包含8个字符
不能使用变量
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
3.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中引入
检查空变量,指的是,已经定义该变量,但是值为空。
比较两个变量
$VARIABLE_1 == $VARIABLE_2 $VARIABLE_1 != $VARIABLE_2 //在GitLab 11.11中引入
可变状态检查
$STAGING //直接使用变量名作为表达式
可变状态检查,如果变量值包含空格字符,它不是空变量。
模式匹配
$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