GitLab 变量的介绍与使用

小丫1年前技术文章1105

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

一、环境变量分类

在 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


相关文章

MySQL运维实战之备份和恢复(8.3)xtrabackup增量备份

xtrabackup支持增量备份。在做增量备份之前,需要先做一个全量备份。xtrabackup会基于innodb page的lsn号来判断是否需要备份一个page。如果page lsn大于上次备份的l...

Nginx限流

Nginx限流

一、背景         限流的目的是通过对并发访问/请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务(定向到错误页),多应用于高并发场景和安全防护场景。通过限流有效地减缓暴力密码破解攻击,也可...

Redis Sentinel与Cluster安装部署(三)

4.3redis-cluster-resharding重新分配槽1、查看当前集群节点状态信息 # redis-cli --cluster check 172.32.1.59:7000 -a dt20...

Golang new and make

Go  语言中 new 方法和 make 方法,都是用于分配相应类型内存空间。1、makemake 内置函数分配并初始化(仅)slice、map 或 chan 类型的对象,返回值是所创建的类型本身。与...

ACOS统一监控之java应用断诊

ACOS统一监控之java应用断诊

一、前言对于一些使用Java语言搭建的应用架构,java的应用诊断可以帮助开发人员快速发现和解决应用程序中的问题,提高应用程序的性能和稳定性。以下是常用Java应用诊断方法:堆转储分析:使用工具如MA...

kaniko构建镜像的方式

docker构建镜像用docker来构建容器镜像也是常用的方法,在具备构建容器镜像所需的两个要素(Dockerfile & 上下文)的前提下,用下述命令就能构建一个容器镜像出来```Plain...

发表评论    

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