极狐GitLab CI/CD 变量是指一系列的环境变量,用来帮助我们控制 CI/CD Job 或 Pipeline 的行为,存储一些可以复用的信息,避免在 .gitlab-ci.yml 中形成硬编码

极狐GitLab CI/CD 变量分为 预定义变量(predefined CI/CD variables)自定义变量(custom variable) 两部分。今天我们先来学习预定义变量这部分。

预定义变量

顾名思义,预定义变量就是极狐GitLab 提前定义好,无须声明即可进行使用的环境变量。 极狐GitLab 有多达 140 个预定义(截止到 14.3-pre 版本)的环境变量,而且是随着版本的迭代在增加的。这儿可以查看所有变量的详细内容。

这些环境变量大体分为四类

下面会挑一些使用频率比较高的进行解析和演示。

commit 相关

变量 极狐GitLab 版本 Runner 版本 描述
CI_BUILDS_DIR all 11.10 执行构建时的顶层目录
CI_COMMIT_AUTHOR 13.11 all commit 中的提交者信息,格式为 Name <email>
CI_COMMIT_BRANCH 12.6 0.5 commit 中的分支信息,在分支流水线中可用,但是在 MR 流水线中不可用
CI_COMMIT_MESSAGE 10.8 all 完整的 commit 信息
CI_COMMIT_SHA 9.0 all commit 的哈希值
CI_COMMIT_SHORT_SHA 11.7 all commit 的哈希短值(前八个字符)
CI_COMMIT_REF_NAME 9.0 all 构建项目的分支或标签
CI_COMMIT_TIMESTAMP 13.4 all 以 ISO 8601 的格式输出 commit 的时间戳信息

可以触发一个 Job 直接进行测试,诸如在 .gitlab-ci.yaml 文件中加入下述内容

after_script:
  - echo "The value of CI_BUILDS_DIR is $CI_BUILDS_DIR"
  - echo "The value of CI_COMMIT_AUTHOR is $CI_COMMIT_AUTHOR"
  - echo "The value of CI_COMMIT_BRANCH is $CI_COMMIT_BRANCH"
  - echo "The value of CI_COMMIT_MESSAGE is $CI_COMMIT_MESSAGE"
  - echo "The value of CI_COMMIT_SHA is $CI_COMMIT_SHA"
  - echo "The value of CI_COMMIT_SHORT_SHA is $CI_COMMIT_SHORT_SHA"
  - echo "The value of CI_COMMIT_REF_NAME is $CI_COMMIT_REF_NAME"
  - echo "The value of CI_COMMIT_TITLE is $CI_COMMIT_TITLE"
  - echo "The value of CI_COMMIT_TIMESTAMP is $CI_COMMIT_TIMESTAMP"

可以查看构建结果

commit-result

Job 相关

变量 极狐GitLab 版本 Runner 版本 描述
CI_JOB_ID all 11.10 执行构建时的顶层目录
CI_JOB_IMAGE 13.11 all job 运行时所在的容器镜像名称
CI_JOB_JWT 12.6 0.5 一个 RS256 JSON web token,用来和支持 JWT 的第三方系统做权限验证
CI_JOB_NAME 10.8 all job 的名称
CI_JOB_STAGE 9.0 all job 的 stage 名称
CI_JOB_STATUS 11.7 all job 的执行状态,为 successfailedcanceled
CI_JOB_URL 11.7 all job 详细信息的 URL
CI_JOB_STARTED_AT 11.7 all job 的起始 UTC 时间

可以触发一个 Job 直接进行测试,诸如在 .gitlab-ci.yaml 文件中加入下述内容

after_script:
  - echo "The value of CI_JOB_ID is $CI_JOB_ID"
  - echo "The value of CI_JOB_IMAGE is $CI_JOB_IMAGE"
  - echo "The value of CI_JOB_JWT is $CI_JOB_JWT"
  - echo "The value of CI_JOB_NAME is $CI_JOB_NAME"
  - echo "The value of CI_JOB_STAGE is $CI_JOB_STAGE"
  - echo "The value of CI_JOB_STATUS is $CI_JOB_STATUS"
  - echo "The value of CI_COMMIT_REF_NAME is $CI_COMMIT_REF_NAME"
  - echo "The value of CI_JOB_URL is $CI_JOB_URL"
  - echo "The value of CI_JOB_STARTED_AT is $CI_JOB_STARTED_AT"

可以查看构建结果

job-result

Pipeline 相关

变量 极狐GitLab 版本 Runner 版本 描述
CI_PIPELINE_SOURCE 10.0 11.10 触发 Pipeline 的事件,诸如 pushschedulemerge_request等。
CI_PIPELINE_URL 11.1 0.5 Pipeline 详细信息的 URL
CI_PIPELINE_ID all all 当前 Pipeline 在极狐GitLab 实例级别的 ID,是实例内唯一
CI_PIPELINE_IID all all 当前 Pipeline 在当前项目内的 ID,是项目内唯一
CI_PIPELINE_TRIGGERED all all 如果 Job 被触发则为 true
CI_PIPELINE_CREATED_AT 13.10 all Pipeline 创建时的 UTC 时间

可以触发一个 Job 直接进行测试,诸如在 .gitlab-ci.yaml 文件中加入下述内容

after_script:
  - echo "The value of CI_PIPELINE_SOURCE is $CI_PIPELINE_SOURCE"
  - echo "The value of CI_PIPELINE_URL is $CI_PIPELINE_URL"
  - echo "The value of CI_PIPELINE_ID is $CI_PIPELINE_ID"
  - echo "The value of CI_PIPELINE_IID is $CI_PIPELINE_IID"
  - echo "The value of CI_PIPELINE_TRIGGERED is $CI_PIPELINE_TRIGGERED"
  - echo "The value of CI_PIPELINE_CREATED_AT is $CI_PIPELINE_CREATED_AT"

可以查看构建结果

pipeline-result

镜像仓库有关

变量 极狐GitLab 版本 Runner 版本 描述
CI_REGISTRY_IMAGE 10.0 11.10 项目的镜像仓库地址
CI_REGISTRY_PASSWORD 10.0 11.10 将镜像推送至镜像仓库时的密码
CI_REGISTRY_USER 9.0 all 将镜像推送至镜像仓库时的用户名
CI_REGISTRY 8.10 0.5 极狐GitLab 镜像仓库的地址(如果启用了)

可以触发一个 Job 直接进行测试,诸如在 .gitlab-ci.yaml 文件中加入下述内容

after_script:
  - echo "The value of CI_REGISTRY_IMAGE is $CI_REGISTRY_IMAGE"
  - echo "The value of CI_REGISTRY_PASSWORD is $CI_REGISTRY_PASSWORD"
  - echo "The value of CI_REGISTRY_USER is $CI_REGISTRY_USER"
  - echo "The value of CI_REGISTRY is $CI_REGISTRY"

可以查看构建结果

image-result

如果使用极狐GitLab 的镜像仓库功能,则会构建镜像并推送至镜像仓库时会频繁用到上述几个参数,使用示例如下

build:
  stage: build
  script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA

CI_REGISTRY_IMAGECI_REGISTRY 的却别就是一个是项目级别的镜像仓库,一个是实例级别的镜像仓库。另外,至于 CI_REGISTRY_USER 的值是 gitlab-ci-token 而不是用户登陆极狐GitLab 的用户名,这个且听后面文章对于镜像仓库具体使用时的分解。

60天免费试用极狐GitLab专业版

极狐GitLab不仅是源代码管理或CI/CD工具,它是一个覆盖完整软件开发生命周期和DevOps的开放式一体化平台。

企业版试用
售前咨询
联系电话
在线支持
预约演示