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