极狐GitLab CI/CD 变量黑魔法之预定义变量

极狐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 版本)的环境变量,而且是随着版本的迭代在增加的。这儿可以查看所有变量的详细内容。

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

  • 通用类型(占绝大部分)
  • 针对 Merge Request Pipeline 的
  • 针对外部 Pull Request Pipeline 的
  • 针对 Kubernetes 的

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

commit 相关

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

bash 复制代码
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"

可以查看构建结果

Job 相关

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

bash 复制代码
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"

可以查看构建结果

Pipeline 相关

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

bash 复制代码
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"

可以查看构建结果

镜像仓库有关

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

bash 复制代码
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"

可以查看构建结果

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

perl 复制代码
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_IMAGE 和 CI_REGISTRY 的却别就是一个是项目级别的镜像仓库,一个是实例级别的镜像仓库。另外,至于 CI_REGISTRY_USER 的值是 gitlab-ci-token 而不是用户登陆极狐GitLab 的用户名,这个且听后面文章对于镜像仓库具体使用时的分解。

还有很多其他的预定义变量,大家可以在打开下面引用链接的地址直接查看,但是每个变量的用法都是类似的,因为是预定义,所以可以在 CI/CD Pipeline 中像上面的 Demo 一样直接使用,而无需先定义,再使用。

当然,预定义是无法满足全部场景的 CI/CD 的,因此极狐GitLab 也支持自定义变量,敬请期待极狐GitLab CI/CD 变量黑魔法你知道多少?(下)

相关推荐
柠檬豆腐脑2 天前
从前端到全栈:Jenkins 自动化部署 Node.js后端+ Vue.js 前端
前端·ci/cd·jenkins
小张认为的测试6 天前
Jenkins下载 Maven、Allure 插件并且配置环境
java·软件测试·ci/cd·jenkins·maven
Suwg2097 天前
【由浅入深认识Maven】第4部分 maven在持续集成中的应用
servlet·ci/cd·maven
周杰伦_Jay7 天前
详细介绍:持续集成与持续部署(CI/CD)技术细节(关键实践、CI/CD管道、优势与挑战)
程序人生·ci/cd·docker·微服务·云原生·容器·人机交互
小钟不想敲代码7 天前
自动化部署(二):Jenkins持续集成(CI/CD)
ci/cd·自动化·jenkins
凌鲨8 天前
OpenSeaOtter使用手册-变更通知和持续部署
ci/cd
思码逸研发效能9 天前
在 DevOps 实践中,如何构建自动化的持续集成和持续交付(CI/CD)管道,以提高开发和测试效率?
运维·人工智能·ci/cd·自动化·研发效能·devops·效能度量
小张认为的测试10 天前
Jenkins邮件通知的详细配置含邮件通知模板!
java·servlet·ci/cd·jenkins·邮件通知
小张认为的测试10 天前
Liunx上Jenkins 持续集成 Java + Maven + TestNG + Allure + Rest-Assured 接口自动化项目
java·ci/cd·jenkins·maven·接口·testng
周杰伦_Jay10 天前
详细介绍:Kubernetes(K8s)的技术架构(核心概念、调度和资源管理、安全性、持续集成与持续部署、网络和服务发现)
网络·ci/cd·架构·kubernetes·服务发现·ai编程