GitLab 变量的介绍与使用

小丫2年前技术文章1309

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

一、环境变量分类

在 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


相关文章

数据湖技术之iceberg(十)Structured Streaming实时写入Iceberg

数据湖技术之iceberg(十)Structured Streaming实时写入Iceberg

目前Spark中Structured Streaming只支持实时向Iceberg中写入数据,不支持实时从Iceberg中读取数据,下面案例我们将使用Structured Streaming从Kafk...

oracle gi安装报错PRCR-1079 : Failed to start resource ora.cvu

安装gi执行root.sh报错:PRCR-1079 : Failed to start resource ora.cvu安装gi执行root.sh报错:PRCC-1014 : LISTENER_SCA...

MySQL 在线开启 GTID

MySQL 在线开启 GTID

描述生产环境上也会遇到需要开启 GTID ,有什么风险?如何在线开启?本篇 SOP 将介绍。GTID 限制由于基于 GTID 复制依赖于事务,所有开启 GTID 时,有些 MySQL 特性不支持:事务...

压测实操--kafka broker压测方案

压测实操--kafka broker压测方案

环境信息:操作系统centos7.9,kafka版本为hdp集群中的2.0版本。kafka broker参数num.replica.fetchers:副本抓取的相应参数,如果发生ISR频繁进出的情况或...

harbor数据迁移-SOP

harbor数据迁移-SOP

背景线下自建harbor需要迁移至云上自建harbor迁移方案harbor私有仓库的主从复制实现数据迁移前置条件harbor目标仓库已部署好,并且版本和源仓库版本最好保持一致迁移步骤1、配置slave...

可持续集成工具

可持续集成工具

持续集成中常用的 Jenkins 替代方案。1BuildMaster项目地址:https://inedo.com/buildmasterInedo 的 BuildMaster 是 Jenkins 替代...

发表评论    

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