环境变量

在构建过程中可以使用环境变量。

# 默认环境变量

# 只读

TIP

下文 合并类事件 包含 merge_requestmerge_request.targetmergeablemerged 四种事件。

详情见分支事件

# 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 的链接
  • 对于由 pushbranch.createtag_push 触发的构建,值为最新 Commit 的链接
  • 否则值为空字符串

# CODING_BRANCH

  • 对于由 pushbranch.createbranch.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

对于由 pushbranch.create 触发的构建,值为 push 前最近一次提交的 sha

# CODING_COMMIT

  • 对于 pushbranch.create 触发的构建,是最后一次提交的 sha
  • 对于 branch.delete 触发的构建,是主分支最后一次提交的 sha
  • 对于 merge_requestmergeable 触发的构建,是源分支最后一次提交的 sha
  • 对于 merge_request.targetmerged 触发的构建,是目标分支最后一次提交的 sha
  • 对于 tag_push 触发的构建,是该 tag 最后一次提交的 sha
  • 对于 自定义事件定时器事件 触发的构建,是指定分支的最后一次提交的 sha

# CODING_COMMIT_SHORT

CODING_COMMIT 的缩写,取其前 8 位字符

# CODING_COMMIT_MESSAGE

CODING_COMMIT 对应的提交信息

# CODING_COMMIT_MESSAGE_TITLE

CODING_COMMIT_MESSAGEtitle 部分,即首行

# 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

当前 pipelinename,没声明时为空

# CODING_PIPELINE_KEY

当前 pipeline 的索引 key,例如 pipeline-0

# CODING_PIPELINE_ID

当前 pipelineid,全局唯一字符串

# CODING_PIPELINE_DOCKER_IMAGE

当前 pipeline 所使用的 docker image,如:alpine:latest

# CODING_PIPELINE_ENDPOINT_*

当前 pipeline 对应的 endpoints,如:CODING_PIPELINE_ENDPOINT_80 = ip:port

# CODING_RUNNER_IP

当前 pipeline 所在 Runnerip

# CODING_CPUS

当前构建流水线可以使用的最大 cpu 核数

# CODING_MERGE_REQUEST

  • 对于由 merge_requestmerge_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: 源分支 push
  • status_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'

# 声明环境变量

  1. 通过 env 声明环境变量
  2. Pipeline 里声明的环境变量对当前 Pipeline 有效
  3. 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}

# 导入环境变量

  1. 通过 imports 指向一个 private 的 Git 仓库文件,可实现将私有票据注入到环境变量
  2. envimportskey 冲突时,优先使用 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 的输出对象的 keyvalue 为映射的环境变量名称。
    • from-key 指定转换前的 key,支持环境变量,支持深层取值。
    • to-key 指定转换后的 key

# 从 Jobs 返回值导出环境变量

script 自定义脚本任务,可设置的属性有:

  • code: 返回码

  • stdout: 标准输出

  • stderr: 标准错误

  • info: 标准输出、标准错误,按时序的混合体

    TIP

    注意:推荐使用 printf "%s" "hello\nworld" 来输出变量,以消除标准输出流最后的换行符,同时保留 \n 等转义字符。

包含 ififModifyifNewBranch 等判断逻辑时,可设置的属性有:

  • skip: 如果没有跳过,那么返回空字符串;如果跳过了,那么返回因何跳过 ififModifyifNewBranch
- 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