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

全部评论

相关推荐

关于客户端行业:入行需谨慎在当今这个科技飞速发展的时代,新兴行业如璀璨繁星般不断涌现,吸引着无数怀揣梦想与热情的年轻人投身其中。客户端领域,曾几何时也是众人瞩目的焦点,然而如今,我却想真诚地劝诫各位,入行客户端需慎重考虑。曾经,客户端行业宛如一片充满宝藏的新大陆,吸引着大批开拓者。那时候,市场需求旺盛,似乎只要有一款稍有特色的客户端产品推出,就能收获大量用户,获得可观的收益。各大公司纷纷布局,投入巨额资金进行研发和推广,行业内一片热火朝天的景象。开发人员备受尊崇,薪资待遇优厚,职业前景看似一片光明。但如今,客户端行业的辉煌已悄然褪色,现实的残酷正无情地摆在眼前。首先,市场竞争达到了白热化的程度。随着时间的推移,各类客户端应用层出不穷,几乎涵盖了生活的方方面面,市场已然趋近饱和。新的客户端想要在这片拥挤的红海之中崭露头角,难度堪比登天。海量的同类产品相互厮杀,用户的选择众多,导致新客户端获取用户的成本急剧攀升。为了吸引哪怕一小部分用户,企业往往需要投入巨额的营销费用,可最终的效果却常常不尽人意。许多创业团队满怀希望地进入这个领域,却在激烈的竞争中折戟沉沙,血本无归。其次,技术更新换代的速度令人目不暇接。客户端行业是一个典型的技术驱动型领域,新技术、新框架不断涌现。今天流行的技术,或许明天就会被淘汰。这就要求从业者必须时刻保持学习的状态,不断更新自己的知识体系,以跟上行业的发展步伐。对于初入行业的新人来说,不仅要掌握扎实的基础知识,还要花费大量的时间和精力去学习最新的技术,压力之大可想而知。而且,即便你努力跟上了技术的节奏,也不能保证你的技能就能一直适应市场的需求。一旦技术方向发生转变,之前的努力可能就会付诸东流,面临重新学习的困境。再者,客户端行业的盈利模式日益复杂且不稳定。过去,广告投放和付费会员是常见的盈利方式,但如今,随着用户对广告的抵触情绪越来越高,广告效果大打折扣,广告收入也随之减少。而付费会员模式,在竞争激烈的市场环境下,用户对于付费的意愿普遍较低,想要培养用户的付费习惯并非易事。此外,政策法规的不断变化也给行业的盈利带来了诸多不确定性。一些原本可行的盈利手段,可能因为政策的调整而被迫终止,企业不得不重新寻找盈利途径,这无疑增加了运营的风险。另外,客户端行业的工作强度极大,对从业者的身心健康造成了严重的挑战。为了赶项目进度、修复漏洞、应对紧急情况,加班加点成为了家常便饭。长期处于这种高强度的工作状态下,身体很容易出现各种问题,精神压力也会与日俱增。许多从业者在年纪轻轻时就患上了各种职业病,生活质量严重下降。而且,由于工作占据了大量的时间,个人的社交生活和家庭关系也往往受到影响,导致身心疲惫。所以,综合以上种种因素,客户端行业如今已不再是那个充满美好憧憬的理想之地。如果你还在考虑是否要踏入这个行业,希望你能充分了解其中的艰辛与风险,慎重做出决定。人生的选择至关重要,有时候,避开看似诱人实则布满荆棘的道路,也是一种智慧。#客户端#
投递新大陆科技集团等公司6个岗位
点赞 评论 收藏
分享
头像
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.数据流和数据报之间区别?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务