环境变量
在构建过程中可以使用环境变量。
# 默认环境变量
# 只读
- 基础变量
- 提交类变量
- CODING_BEFORE_SHA
- CODING_COMMIT
- CODING_COMMIT_SHORT
- CODING_COMMIT_MESSAGE
- CODING_COMMIT_MESSAGE_TITLE
- CODING_COMMITTER
- CODING_COMMITTER_EMAIL
- CODING_TAG_MESSAGE
- CODING_TAG_RELEASE_TITLE
- CODING_TAG_RELEASE_DESC
- CODING_TAG_IS_RELEASE
- CODING_TAG_IS_PRE_RELEASE
- CODING_IS_NEW_BRANCH
- CODING_IS_NEW_BRANCH_WITH_UPDATE
- 仓库类变量
- 构建类变量
- CODING_BUILD_ID
- CODING_BUILD_WEB_URL
- CODING_BUILD_START_TIME
- CODING_BUILD_USER
- CODING_BUILD_USER_ID
- CODING_BUILD_STAGE_NAME
- CODING_BUILD_JOB_NAME
- CODING_BUILD_WORKSPACE
- CODING_BUILD_FAILED_MSG
- CODING_BUILD_FAILED_STAGE_NAME
- CODING_PIPELINE_NAME
- CODING_PIPELINE_KEY
- CODING_PIPELINE_ID
- CODING_PIPELINE_DOCKER_IMAGE
- CODING_PIPELINE_ENDPOINT_*
- CODING_RUNNER_IP
- CODING_CPUS
- CODING_IS_RETRY
- 合并类变量
- CODING_MERGE_REQUEST
- CODING_MERGE_REQUEST_LIKE
- CODING_MERGE_REQUEST_PROPOSER
- CODING_MERGE_REQUEST_TITLE
- CODING_MERGE_REQUEST_DESC
- CODING_MERGE_REQUEST_BRANCH
- CODING_MERGE_REQUEST_SHA
- CODING_MERGE_REQUEST_TARGET_SHA
- CODING_MERGE_REQUEST_MERGE_SHA
- CODING_MERGE_REQUEST_SLUG
- CODING_MERGE_REQUEST_ACTION
- CODING_MERGE_REQUEST_ID
- CODING_MERGE_REQUEST_IID
- CODING_MERGE_REQUEST_REVIEWERS
- CODING_MERGE_REQUEST_REVIEW_STATE
- CODING_REVIEW_REVIEWED_BY
- 远程开发类变量
# CI
true
# CODING
true
# CODING_CURRENT_WEB_PROTOCOL
当前 web 使用的协议,http | https
# CODING_CURRENT_DOMAIN
当前访问域名
# CODING_PROJECT_ID
CODING 项目 ID
# CODING_PROJECT_NAME
CODING 项目名
# CODING_TEAM_NAME
CODING 团队名
# CODING_EVENT
值为触发构建的事件名称
事件类型参见分支事件
# CODING_EVENT_URL
- 对于由
合并类事件
触发的构建,值为该MR
的链接 - 对于由
push
、branch.create
、tag_push
触发的构建,值为最新Commit
的链接 - 否则值为空字符串
# CODING_BRANCH
- 对于由
push
、branch.create
、branch.delete
触发的构建,值为当前的分支名 - 对于由
合并类事件
触发的构建,值为目标分支的分支名 - 对于由
tag_push
触发的构建,值为tag
名 - 对于由
自定义事件
触发的构建,值为对应的分支名称 - 对于由
crontab
触发的构建,值为对应的分支名称
# CODING_BRANCH_SHA
- 对于
branch.delete
触发的构建,为空字符串 - 其他情况为
CODING_BRANCH
最近一次提交的sha
# CODING_PROJECT_TOKEN_USER_NAME
项目令牌用户名
# CODING_PROJECT_TOKEN
项目令牌,可用于:
- 拉取推送代码
- 拉取推送制品库
- 新建、查询、删除、编辑合并请求
- 新建、查询、删除、编辑版本发布
- 新建、查询、删除、编辑Wiki
- 触发原持续集成构建
# CODING_BEFORE_SHA
对于由 push
、branch.create
触发的构建,值为 push 前最近一次提交的 sha
# CODING_COMMIT
- 对于
push
、branch.create
触发的构建,是最后一次提交的sha
- 对于
branch.delete
触发的构建,是主分支最后一次提交的sha
- 对于
merge_request
、mergeable
触发的构建,是源分支最后一次提交的sha
- 对于
merge_request.target
、merged
触发的构建,是目标分支最后一次提交的sha
- 对于
tag_push
触发的构建,是该 tag 最后一次提交的sha
- 对于
自定义事件
、定时器事件
触发的构建,是指定分支的最后一次提交的sha
# CODING_COMMIT_SHORT
CODING_COMMIT
的缩写,取其前 8 位字符
# CODING_COMMIT_MESSAGE
CODING_COMMIT
对应的提交信息
# CODING_COMMIT_MESSAGE_TITLE
CODING_COMMIT_MESSAGE
的 title
部分,即首行
# CODING_COMMITTER
CODING_COMMIT
对应的提交者
# CODING_COMMITTER_EMAIL
CODING_COMMITTER_EMAIL
对应的提交者邮箱
# CODING_TAG_MESSAGE
- 对于
tag_push
触发的构建, 是其Tag message
- 否则值为空字符串
# CODING_TAG_RELEASE_TITLE
- 对于通过 Coding 页面创建
代码版本
触发的构建, 是其版本发布标题
- 否则值为空字符串
# CODING_TAG_RELEASE_DESC
- 对于通过 Coding 页面创建
代码版本
触发的构建, 是其描述
- 否则值为空字符串
# CODING_TAG_IS_RELEASE
- 对于通过 Coding 页面创建
代码版本
触发的tag_push
构建,值为true
- 否则为
false
。
# CODING_TAG_IS_PRE_RELEASE
- 对于通过 Coding 页面创建
代码版本
触发的tag_push
构建,若为预发布
则值为true
- 否则为
false
。
# CODING_REPO_SLUG
目标仓库路径,格式为 team_name/project_name/repo_name
# CODING_REPO_NAME
目标仓库名称
# CODING_REPO_ID
目标仓库的数字 ID
# CODING_REPO_URL_HTTPS
目标仓库仓库 https 地址
# CODING_REPO_URL_SSH
目标仓库仓库ssh地址
# CODING_BUILD_ID
当前构建的流水号,全局唯一
# CODING_BUILD_WEB_URL
当前构建的日志地址
# CODING_BUILD_START_TIME
当前构建的开始时间,UTC格式,示例 Tue Oct 19 2021 17:09:14 GMT+0800
# CODING_BUILD_USER
当前构建的触发者名称
# CODING_BUILD_USER_ID
当前构建的触发者 ID
# CODING_BUILD_STAGE_NAME
当前构建的 stage
名称
# CODING_BUILD_JOB_NAME
当前构建的 job
名称
# CODING_BUILD_WORKSPACE
自定义 shell
脚本执行的工作空间根目录
# CODING_BUILD_FAILED_MSG
流水线构建失败的错误信息,可在 failStages
中使用
# CODING_BUILD_FAILED_STAGE_NAME
流水线构建失败的 stage
的名称,可在 failStages
中使用
# CODING_PIPELINE_NAME
当前 pipeline
的 name
,没声明时为空
# CODING_PIPELINE_KEY
当前 pipeline
的索引 key
,例如 pipeline-0
# CODING_PIPELINE_ID
当前 pipeline
的 id
,全局唯一字符串
# CODING_PIPELINE_DOCKER_IMAGE
当前 pipeline
所使用的 docker image
,如:alpine:latest
# CODING_PIPELINE_ENDPOINT_*
当前 pipeline
对应的 endpoints
,如:CODING_PIPELINE_ENDPOINT_80
= ip:port
# CODING_RUNNER_IP
当前 pipeline
所在 Runner
的 ip
# CODING_CPUS
当前构建流水线可以使用的最大 cpu 核数
# CODING_MERGE_REQUEST
- 对于由
merge_request
、merge_request.target
触发的构建,值为true
- 否则值为
false
# CODING_MERGE_REQUEST_LIKE
- 对于由
合并类事件
触发的构建,值为true
- 否则值为
false
# CODING_MERGE_REQUEST_PROPOSER
- 对于由
合并类事件
触发的构建,值为提出MR
者名称 - 否则值为空字符串
# CODING_MERGE_REQUEST_TITLE
- 对于由
合并类事件
触发的构建,值为提MR
时候填写的标题 - 否则值为空字符串
# CODING_MERGE_REQUEST_DESC
- 对于由
合并类事件
触发的构建,值为提MR
时候填写的描述 - 否则值为空字符串
# CODING_MERGE_REQUEST_BRANCH
- 对于由
合并类事件
触发的构建,值为发起MR
的源分支名称 - 否则值为空字符串
# CODING_MERGE_REQUEST_SHA
- 对于由
合并类事件
触发的构建,值为当前MR
源分支最新的提交sha
- 否则值为空字符串
# CODING_MERGE_REQUEST_TARGET_SHA
- 对于由
合并类事件
触发的构建,值为当前MR
目标分支最新的提交sha
- 否则值为空字符串
# CODING_MERGE_REQUEST_MERGE_SHA
- 对于由
合并类事件
触发的构建,值为当前MR
(预)合并后的sha
- 否则值为空字符串
# CODING_MERGE_REQUEST_SLUG
- 对于由
合并类事件
触发的构建,值为源仓库的仓库slug
,如team_name/project_name/repo_name
- 否则值为空字符串
# CODING_MERGE_REQUEST_ACTION
对于由 合并类事件
触发的构建,可能的值有:
created
: 新建MR
code_update
: 源分支 pushstatus_update
: 评审通过或 CI 状态变更时MR
变成可合并 否则值为空字符串
# CODING_MERGE_REQUEST_ID
- 对于由
合并类事件
触发的构建,值为当前或者关联MR
的全局唯一ID
- 否则值为空字符串
# CODING_MERGE_REQUEST_IID
- 对于由
合并类事件
触发的构建,值为当前或者关联MR
在仓库中的编号IID
- 否则值为空字符串
# CODING_MERGE_REQUEST_REVIEWERS
- 对于由
合并类事件
触发的构建,值为评审人列表,多个以,
分隔 - 否则值为空字符串
# CODING_MERGE_REQUEST_REVIEW_STATE
对于由 合并类事件
触发的构建
- 有评审者且有人通过评审,值为approve
- 有评审者但无人通过评审,值为unapprove
- 否则值为空字符串
# CODING_REVIEW_REVIEWED_BY
- 对于由
合并类事件
触发的构建,值为同意评审的评审人列表,多个以,
分隔 - 否则值为空字符串
# CODING_IS_NEW_BRANCH
当前分支是否属于一个新创建的分支,默认为 false
# CODING_IS_NEW_BRANCH_WITH_UPDATE
当前分支是否属于一个新创建的分支,且带有新 commit,默认为 false
# CODING_IS_RETRY
当前构建是否由 rebuild
触发
# HUSKY_SKIP_INSTALL
兼容 ci 环境下 husky
# VSCODE_WEB_URL
VSCode
远程开发地址,仅声明了 services
: vscode
时存在
# 使用环境变量
除在了 shell 脚本中可以使用环境变量以外,在内置任务的 options
属性里也是可以使用的
# 在 script 中使用
master:
push:
- stages:
- name: test internal env
script: echo $CODING_BRANCH
# 在内置任务 options
中使用
master:
push:
- env:
COMMIT_MSG: commit message
ADD_PATH: release/
stages:
- name: xxxx
type: xxx:xxx
options:
commitMessage: ${COMMIT_MSG}
mergeType: rebase
keepCommit: false
add: ${ADD_PATH}
# 阻止环境变量替换
默认情况下,处在 options 中的字段,会在任务执行阶段,进行环境变量替换。
比如
options:
shell: |
echo '$CODING_EVENT'
echo '$myVar'
替换完为
options:
shell: |
echo 'push'
echo ''
如果不希望 myVar
被替换,可以通过 \$
阻止替换
options:
shell: |
echo '$CODING_EVENT'
echo '\$myVar'
替换完为
options:
shell: |
echo 'push'
echo '$myVar'
# 声明环境变量
- 通过
env
声明环境变量 - 在
Pipeline
里声明的环境变量对当前Pipeline
有效 - 在
Job
里声明的环境变量对当前Job
有效
master:
push:
- env:
COMMIT_MSG: commit message
stages:
- name: xxxx
type: xxx:xxx
env:
ADD_PATH: release/
options:
commitMessage: ${COMMIT_MSG}
mergeType: rebase
keepCommit: false
add: ${ADD_PATH}
# 导入环境变量
- 通过
imports
指向一个private
的 Git 仓库文件,可实现将私有票据注入到环境变量 - 当
env
和imports
的key
冲突时,优先使用env
master:
push:
- services:
- docker
imports: https://xxx/envs.yml
stages:
- name: docker info
script: docker info
- name: docker login
script: docker login ${imageDomain} -u $TEST_DOCKER_USER -p $TEST_DOCKER_PWD
https://xxx/envs.yml
内容示例
TEST_DOCKER_USER:your_docker_username
TEST_DOCKER_PWD:your_docker_password
TEST_NPM_USER:your_npm_username
TEST_NPM_PWD:your_npm_password
whatever_key_you_want:whatever_value_you_want
# 修改环境变量
通过 exports
属性可以在 Job
中修改、新增、删除环境变量,生命周期为当前 Pipeline
。
exports:
from-key: to-key
exports
是一个对象,其中对象的key
为本Job
的输出对象的key
,value
为映射的环境变量名称。from-key
指定转换前的key
,支持环境变量,支持深层取值。to-key
指定转换后的key
# 从 Jobs 返回值导出环境变量
script
自定义脚本任务,可设置的属性有:
code
: 返回码stdout
: 标准输出stderr
: 标准错误info
: 标准输出、标准错误,按时序的混合体TIP
注意:推荐使用
printf "%s" "hello\nworld"
来输出变量,以消除标准输出流最后的换行符,同时保留\n
等转义字符。
包含 if
、ifModify
、ifNewBranch
等判断逻辑时,可设置的属性有:
skip
: 如果没有跳过,那么返回空字符串;如果跳过了,那么返回因何跳过if
、ifModify
、ifNewBranch
。
- name: use if
if: exit -1
exports:
skip: REASON
- name: tell last
script: echo $REASON # $REASON 的值为 if 这个字符串
# 增删改查环境变量
master:
push:
- env:
CUSTOM_ENV_DATE_INFO: default
CUSTOM_ENV_FOR_DELETE: default
stages:
- name: set env
script: echo -n $(date "+%Y-%m-%d %H:%M")
exports:
# 新增
code: CUSTOM_ENV_DATE_CODE
# 修改
info: CUSTOM_ENV_DATE_INFO
# 删除
CUSTOM_ENV_FOR_DELETE: null
# 删除
# CUSTOM_ENV_FOR_DELETE:
- name: tag
type: xxx:xxxx
exports:
#支持对象深层取值
nextRelease.gitTag: CUSTOM_ENV_GIT_TAG
- name: echo env
script:
- echo $CUSTOM_ENV_DATE_CODE
- echo $CUSTOM_ENV_DATE_INFO
- echo $CUSTOM_ENV_DATE_STDOUT
- echo $CUSTOM_ENV_FOR_DELETE
- echo $CUSTOM_ENV_GIT_TAG
# 在内置任务中修改环境变量
master:
push:
- stages:
- name: xxxx
type: xxx:xxx
options:
product: public
name: coding-ci
dist: release/
exports:
version: CUSTOM_ENV_VERSION
url: CUSTOM_ENV_URL
- name: echo env
script:
- echo $CUSTOM_ENV_VERSION
- echo $CUSTOM_ENV_URL