GitLab CI/CD关键词(五):变量 variables


转载自:https://cloud.tencent.com/developer/article/1978778

简介

在GitLab CI/CD中变量对于业务的实现起着非常大做作用,用户可以使用环境中的预设变量,或自定义的变量来是实现各种各样的需求。在GitLab CI/CD中定义变量的方式也有很多种。

变量variables

在GitLab CI/CD中 用户可以自定义变量,可以使用预设变量,一些变量也会表明当前的流水线状态,比如当前操作的是那个分支,分支是不是在合并中?这些都可以通过变量获取到。在使用变量时,最常用的是在 script,before_script,after_script这三个关键词中使用。也有在cache中使用的。总是变量的引入让流水线变得更加灵活丰富。下面介绍一下变量的定义与使用

预设变量

首先是流水线中的预设变量,这些都是GitLab CI/CD自动注入到当前环境的。很多是只读的变量,不允许用户修改。这些变量都是使用 以CI开头,大写_的方式组成。如 预设变量 CI_COMMIT_AUTHOR,它是用于表明 提交的作者,格式为:名称<邮箱>

在GitLab CI/CD中有非常多的预设变量,但大致又分为以下几种。

  • 通用
  • MR流水线专用
  • PR流水线专用

具体可以查看官方的链接

官方提供的预设变量实在太多了,于是我为读者总结了一些常用的预设变量,并将描述翻译成了中文,大家可以点击此链接查看

.gitlab-ci.yml 文件中定义变量

.gitlab-ci.yml文件中定义变量,需要使用variables关键词。如下例子

variables:
  DEPLOY_SITE: "https://example.com/"

deploy_job:
  stage: deploy
  script:
    - deploy-script --url $DEPLOY_SITE --path "/"

deploy_review_job:
  stage: deploy
  variables:
    REVIEW_PATH: "/review"
  script:
    - deploy-review-script --url $DEPLOY_SITE --path $REVIEW_PATH

关键词variables 既是一个全局关键词,也是一个作业关键词,当使用它在文件顶部定义变量时,而不是某一个作业内,那么这些变量将对整个流水线可见。

如果使用它在某个作业下定义变量,那么这些变量只能在当前作业内可见。变量的值可用是一个字符串,或者字母数字 下划线组成的字符。可以使用变量来定义一个新的变量,如下

variables:
  DEPLOY_SITE: "https://example.com/"
  BU: "${DEPLOY_SITE}time"

如果你想要描述一个变量的含义的话,可以使用 variables:description 如下

variables:
  DEPLOY_ENVIRONMENT:
    value: "staging"
    description: "The deployment target. Change this variable to 'canary' or 'production' if needed."

如果你想要查看所有的变量可以在script中使用 script: export 来打印所有变量。

在UI页面上定义变量

除了在.gitlab-ci.yml文件中定义变量,我们还可以通过GitLab UI来定义新的变量

如下


在此处声明的变量可以进行水印,或者设置为只在保护分支使用。

这是项目级别的变量定义,开发者也可以设置群组级别的变量,二者使用范围不一样。

项目级别的变量,在当前项目,所有流水线都可见。

群组级别的变量在当前群组下所有的项目的所有流水线都可见。

在Runner配置文件中定义变量

有些变量可以在runner的配置文件下定义值,设置之后对于使用该runner的流水线,这些变量都会生效。可配置的变量大致有这些

  • GIT_STRATEGY
  • GIT_SUBMODULE_STRATEGY
  • GIT_CHECKOUT
  • GIT_CLEAN_FLAGS
  • GIT_FETCH_EXTRA_FLAGS
  • GIT_SUBMODULE_UPDATE_FLAGS
  • GIT_DEPTH (shallow cloning)
  • GIT_CLONE_PATH (custom build directories)
  • TRANSFER_METER_FREQUENCY (artifact/cache meter update frequency)
  • ARTIFACT_COMPRESSION_LEVEL (artifact archiver compression level)
  • CACHE_COMPRESSION_LEVEL (cache archiver compression level)
  • CACHE_REQUEST_TIMEOUT (cache request timeout)

其他手段定义变量

手动运行作业时

手动触发流水线时注入变量



定时运行时

哪些地方可以使用变量

  • after_script
  • artifacts:name
  • before_script
  • cache:key
  • environment:name
  • environment:url
  • except:variables:[]
  • image
  • include
  • only:variables:[]
  • resource_group
  • rules:if
  • script
  • services:[]:name
  • services:[]
  • tags
  • variables

相关