环境变量
功能介绍
在流水线执行过程中,我们往往需要读取一些构建过程的环境变量,又或者需要将一些配置(如:账号密码/版本号等)信息以环境变量的形式注入到构建过程中,供个任务执行时候使用。
系统内置的环境变量
1.系统内置的环境变量,不允许覆盖
2.下文中 合并类事件
包含 merge_request
、mergeable
、merged
三种事件。
基础变量:
CI
值为 true,代表在 CI 环境下
CODING
值为 true,代表在 CODING 环境下
CODING_EVENT
值为触发构建的事件名称
事件类型参见分支事件。
CODING_EVENT_URL
- 对于由
合并类事件
触发的构建,值为该Merge Request
的链接 - 对于由
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_BEFORE_SHA
- 对于由
push
、branch.create
触发的构建,值为 push 前最近一次提交的 sha
CODING_COMMIT
- 对于
push
、branch.create
触发的构建,是最后一次提交的sha
- 对于
branch.delete
触发的构建,是主分支最后一次提交的sha
- 对于
合并类事件
触发的构建,是源分支最后一次提交的sha
- 对于
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
的TITLE
部分,即首行
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
- 当前构建 ID,全局唯一
CODING_BUILD_WEB_URL
- 当前构建的日志地址
CODING_BUILD_START_TIME
- 当前构建的开始时间,
UTC
格式,示例Tue Oct 19 2021 17:09:14 GMT+0800
CODING_BUILD_USER
- 当前构建的触发者名称
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
,当多个流水线通过key:value
声明时,key
为流水线声明的key
.当多个流水线为数组时,key
为pipeline-下标
,例如pipeline-0
。
CODING_PIPELINE_ID
当前 pipeline
的 id
,全局唯一字符串
CODING_PIPELINE_DOCKER_IMAGE
当前 pipeline
所使用的 docker image
,如:alpine:latest
CODING_RUNNER_IP
当前 pipeline
所在 Runner
的 ip
CODING_MERGE_REQUEST
对于由 merge_request
触发的构建,值为 true
否则值为 false
CODING_MERGE_REQUEST_LIKE
对于由 合并类事件
触发的构建,值为 true
否则值为 false
CODING_MERGE_REQUEST_PROPOSER
对于由 合并类事件
触发的构建,值为提出 Merge Request
者名称
否则值为空字符串
CODING_MERGE_REQUEST_TITLE
对于由 合并类事件
触发的构建,值为提 Merge Request
时候填写的标题
否则值为空字符串
CODING_MERGE_REQUEST_DESC
对于由 合并类事件
触发的构建,值为提 Merge Request
时候填写的描述
否则值为空字符串
CODING_MERGE_REQUEST_BRANCH
对于由 合并类事件
触发的构建,值为发起 Merge Request
的源分支名称
否则值为空字符串
CODING_MERGE_REQUEST_SHA
对于由 合并类事件
触发的构建,值为当前 Merge Request
最新的提交 sha
否则值为空字符串
CODING_MERGE_REQUEST_SLUG
对于由 合并类事件
触发的构建,值为源仓库的仓库 slug,如 team_name/project_name/repo_name
否则值为空字符串
CODING_MERGE_REQUEST_ACTION
对于由 合并类事件
触发的构建,可能的值有:
created
: 新建 MRcode_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
在任务配置中使用
master:
push:
- env:
TEST_IP: 0.0.0.0
DIST: release/
stages:
- name: notify
image: tencentcom/wecom-message:latest
settings:
robot: ${WECOM_MR_CHECK_ROBIT}
msgType: markdown
visibleToUser: ${CODING_MERGE_REQUEST_PROPOSER}
content: |
> 走查代码啦
>
> ${CODING_MERGE_REQUEST_TITLE}
> [${CODING_EVENT_URL}](${CODING_EVENT_URL})
>
> [${CODING_BUILD_WEB_URL}](${CODING_BUILD_WEB_URL})
>
> from ${CODING_MERGE_REQUEST_PROPOSER}
阻止环境变量替换
默认情况下,处在 options 中的字段,会在 yaml 解析阶段,进行环境变量替换。
比如
options:
shell: |
echo '$ORANGE_EVENT'
echo '$myVar'
替换完为
options:
shell: |
echo 'push'
echo ''
如果不希望 myVar
被替换,可以通过 \$
阻止替换
options:
shell: |
echo '$ORANGE_EVENT'
echo '\$myVar'
替换完为
options:
shell: |
echo 'push'
echo '$myVar'
声明环境变量
- 通过
env
声明环境变量 - 在
Pipeline
里声明的环境变量对当前Pipeline
有效 - 在
Job
里声明的环境变量对当前Job
有效
master:
push:
- env:
TEST_IP: 0.0.0.0
stages:
- name: transfer
type: orange-ci:transfer
env:
DIST: release/
options:
dist: ${DIST}
to: /data/release/here/
ips:
- ${TEST_IP}
导入环境变量
- 通过
imports
指向一个private
的 Git 项目文件,可实现私有票据注入到环境变量 - 当
env
和imports
的key
冲突时,优先使用env
需要目标仓库授权给
orange-ci
账号Follower
或以上权限
master:
push:
- services:
- docker
imports: https://e.coding.net/coding-demo/project-demo/repo-demo/blob/master/envs
stages:
- name: docker info
script: docker info
- name: docker login
script: docker login ${imageDomain} -u $TEST_DOCKER_USER -p $TEST_DOCKER_PWD
TEST_DOCKER_USER=your_docker_username
TEST_DOCKER_PWD=your_docker_password
TEST_NPM_USER=your_npm_username
TEST_NPM_PWD=your_npm_password
设置环境变量
通过 exports
属性可以在 Job 中修改、新增、删除环境变量,生命周期为当前 Pipeline。
exports:
from-key: to-key
exports
是一个对象,其中对象的 key 为本 Job 的输出对象的 key,value 为映射的环境变量名称。from-key
指定转换前的 key,支持环境变量,支持深层取值。to-key
指定转换后的 key
myJson.json
{
"myVar": 123,
"deep": {
"myVar": 123,
}
}
将 Jobs 输出导出到环境变量
script
自定义脚本任务,可设置的属性有:
code
: 返回码stdout
: 标准输出stderr
: 标准错误info
: 标准输出、标准错误,按时序的混合体skip
: 如果没有跳过,那么返回空字符串;如果跳过了,那么返回因何跳过if
/ifModify
/ifNewBranch
。
- name: set DOCKER_IMAGE_TAG
script: echo -n $CODING_REPO_SLUG:latest
exports:
info: DOCKER_IMAGE_TAG
- name: docker build
scritp: docker build -t $DOCKER_IMAGE_TAG .
在阅读中是否遇到以下问题?*
您希望我们如何改进?*
如果您希望得到回复,请留下您的邮箱地址。