GitLab CI/CD 中内置变量

在 GitLab CI/CD 中,内置变量(Predefined Variables) 是系统自动提供的环境变量,用于获取上下文信息、控制流程行为。以下是分类整理的常用内置变量及其用途:

一、核心变量(最常用)

CI

true

标记当前运行在CI环境中

CI_COMMIT_REF_NAME

main

分支名或标签名

CI_COMMIT_SHA

a1b2c3d4...

当前提交的完整SHA

CI_COMMIT_SHORT_SHA

a1b2c3d

提交SHA前8位

CI_JOB_ID

123456

当前Job的唯一ID

CI_JOB_NAME

build

当前Job名称

CI_PIPELINE_ID

7890

当前Pipeline的ID

CI_PROJECT_ID

123

项目的GitLab唯一ID

CI_PROJECT_PATH

my-group/my-project

项目的分组+名称路径

二、分支/合并请求相关

CI_MERGE_REQUEST_ID

合并请求(MR)的ID

CI_MERGE_REQUEST_TITLE

MR的标题

CI_MERGE_REQUEST_SOURCE_BRANCH_NAME

MR的源分支名

CI_COMMIT_BRANCH

推送分支名(仅分支触发时有效)

CI_DEFAULT_BRANCH

项目的默认分支(通常为

main

三、环境与部署

CI_ENVIRONMENT_NAME

部署的目标环境名(如

production

CI_ENVIRONMENT_URL

部署环境的访问URL

CI_DEPLOY_FREEZE

是否处于部署冻结期(

true

/

false

四、Runner与执行上下文

CI_RUNNER_ID

执行当前Job的Runner ID

CI_RUNNER_TAGS

Runner的标签列表(如

docker,aws

CI_SERVER_HOST

GitLab实例的域名(如

gitlab.example.com

五、文件路径

CI_PROJECT_DIR

/builds/my-group/my-project

项目克隆的完整路径

CI_CONFIG_PATH

.gitlab-ci.yml

CI配置文件的路径

六、时间变量

CI_PIPELINE_CREATED_AT

2023-05-20T08:30:00Z

Pipeline创建时间

CI_JOB_STARTED_AT

2023-05-20T08:31:00Z

Job开始时间

七、特殊用途变量

CI_DEBUG_TRACE

设置为

true

时显示详细调试日志

CI_SKIP_SYSTEM_HOOKS

跳过系统钩子执行

使用示例

1. 条件判断

deploy:
  script: ./deploy.sh
  rules:
    - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH  # 仅默认分支部署

2. 动态生成资源名称

build:
  script:
    - docker build -t app:$CI_COMMIT_SHORT_SHA .

3. 调试模式

debug_job:
  script:
    - echo "Runner tags: $CI_RUNNER_TAGS"
    - env | sort  # 打印所有变量
  variables:
    CI_DEBUG_TRACE: "true"  # 开启详细日志

查看所有内置变量

  1. 在Pipeline中打印
  2. 官方文档GitLab Predefined Variables

注意事项

  1. 变量覆盖:自定义变量会覆盖同名内置变量
  2. 敏感信息:内置变量中可能包含敏感数据(如 CI_JOB_TOKEN),需谨慎处理
  3. 版本差异:部分变量仅在特定GitLab版本中可用

掌握这些内置变量可以极大增强Pipeline的灵活性和自动化程度!

进阶高级测试工程师 文章被收录于专栏

《高级软件测试工程师》专栏旨在为测试领域的从业者提供深入的知识和实践指导,帮助大家从基础的测试技能迈向高级测试专家的行列。 在本专栏中,主要涵盖的内容: 1. 如何设计和实施高效的测试策略; 2. 掌握自动化测试、性能测试和安全测试的核心技术; 3. 深入理解测试驱动开发(TDD)和行为驱动开发(BDD)的实践方法; 4. 测试团队的管理和协作能力。 ——For.Heart

全部评论

相关推荐

头像
04-10 23:19
已编辑
门头沟学院 C++
0offer 1面挂 2面挂 排序挂。。。继续加油,还需运气,再努力一把吧T.T当时统一整理的忘记是分别是哪家的题目了,项目和其他就不整理了。希望我们都有美好未来🌸#### **1.C++新特性,别扯封装继承多态**#### **2.你说线程池用future怎么用的?我commit之后我就等着还是怎么样?**立刻返回future对象,.get()的话就阻塞该线程等待线程池中worker执行完毕再得到结果。#### **3.如何用基类指针调用子类方法?**#### **4.如何让子类强制使用父类的实现?我说用"::", 他问具体底层怎么实现的?**#### **5.类B继承类A,类A有虚函数,那类B中有几个虚表?我回答1个。面试官继续问:那我怎么用B调用到A类里的实现虚函数呢?**#### **6.c++编写一个hello world, Linux上运行起来,并且输出在屏幕上,说出整个过程。怎么找到main函数的,怎么执行的,怎么输出到屏幕上。**#### **7.printf怎么实现的?怎么做到显示到屏幕上一个字符的?知道printf的实现在哪个源文件里面吗?**#### **8.内核空间和用户空间?printf在用户态执行还是内核态?从用户态调用到内核态。追问:他是怎么调用到内核态的?**#### **9.虚拟地址和物理地址**#### **10.虚拟地址到物理地址的映射是什么时候发生的?...引导我从用户态到内核态发生的**#### **11.malloc 1G空间。在1G里写100M数据,实际上映射到物理内存多少空间?什么时候映射的?**#### **12.分配了1G空间,我在0字节写了一个字节,我seek到100M位置写了一个字节,我实际需要分配多少的物理地址占用多少物理空间?**#### **13.讲一下C++堆和栈的实现?**#### 14.迭代器是什么?和指针有什么区别?为什么vector扩容迭代器失效?你知道栈和堆以及list queue deque的底层吗?说说要点。#### **15.stl栈怎么扩容?**#### 16.数据流和数据报之间区别?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务