GitLab 变量的介绍与使用

小丫2年前技术文章1386

环境变量是一个动态命名的值,它可以影响正在运行的进程在操作系统上的行为方式。

一、环境变量分类

在 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 环境变量的优先级

变量的优先级顺序(从最高到最低):

  1. 触发变量或计划的管道变量

  2. 项目级变量

  3. 组级变量

  4. YAML 中定义的作业级变量

  5. YAML 中定义的全局变量

  6. 预定义的环境变量

//定义全局和作业变量

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


相关文章

hbase无法执行脚本停止服务问题分析

hbase无法执行脚本停止服务问题分析

问题现象:hbase执行stop-hbase.sh无法停止hbase进程定位过程:1.     执行脚本发现脚本在执行了停止命令后一直在循环查询hbase状态2...

Linux命令traceroute—追踪网络路由利器

说明:通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能...

Linux Firewall规则配置

Linux Firewall规则配置

1、Firewalld是否启动成功systemctl start firewalld && systemctl enable firewalld2、开启规则需求:客户由于网络审查问题。...

某系统被入侵挖矿排查案例

某系统被入侵挖矿排查案例

1、当时的出现的情况是:执行 top、w、netstat命令的时候,会出现卡住的情况,无法正常使用2、我们上传新的top命令之后,只是看到CPU使用率比较高,但是看不到占用CPU的异常进程3、我们通过...

SQL Server优化入门系列(四)——  找到Top SQL

SQL Server优化入门系列(四)—— 找到Top SQL

说明从会话信息中我们可以查看实例当前正在运行的SQL、当前被Block的SQL。但是如果要查看过去一段时间执行的SQL,我们有几个选择1、通过外部SQL审计平台记录所有SQL。2、通过SQL Serv...

高效便捷!解锁阿里云跨账号专线互联的全新实施方案

高效便捷!解锁阿里云跨账号专线互联的全新实施方案

01背    景为持续提升金融云环境的合规标准以及可用区内产品服务的性能和稳定性,阿里云将对杭州地域BCD三个金融云可用区进行基础设施架构升级与改造,对应可用区云产品将于 2024...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。