GitLab中CI_PIPELINE_TRIGGERED何时为false或null?
关于GitLab CI_PIPELINE_TRIGGERED变量的澄清
首先明确结论:CI_PIPELINE_TRIGGERED永远不会返回false或null——这个变量只有在流水线通过GitLab的专用触发器机制触发时才会被设置为true,其他所有场景下,这个变量根本不会被定义(也就是不存在)。
什么时候会出现CI_PIPELINE_TRIGGERED=true?
只有当流水线通过以下几种特定方式启动时,GitLab才会设置这个变量:
- 使用项目CI/CD设置中生成的触发器令牌触发的流水线
- 在项目的「CI/CD触发器」页面手动点击运行的流水线
- 通过GitLab API调用
POST /projects/:id/trigger/pipeline触发的流水线
为什么你会觉得它"始终为true"?
大概率是你测试的场景刚好都是用触发器机制触发的流水线,或者在配置里错误地默认给这个变量赋值了。如果换用其他触发方式(比如代码推送、合并请求、定时任务、手动运行流水线等),你会发现这个变量根本不存在。
和CI_PIPELINE_SOURCE的区别
你之前混淆的CI_PIPELINE_SOURCE是用来标识所有流水线触发来源的变量,它的值包括push、merge_request_event、schedule、trigger等。而CI_PIPELINE_TRIGGERED只是针对CI_PIPELINE_SOURCE=trigger这个特定场景的一个快捷标记——只有当来源是触发器时,这个变量才会存在且为true。
正确的判断方式
如果要判断流水线是否来自触发器,推荐用两种方式:
check-trigger: script: # 方式1:检查变量是否存在 - if [ -n "$CI_PIPELINE_TRIGGERED" ]; then echo "触发器触发的流水线"; else echo "非触发器触发"; fi # 方式2:直接判断CI_PIPELINE_SOURCE的值 - if [ "$CI_PIPELINE_SOURCE" = "trigger" ]; then echo "触发器触发的流水线"; fi
内容的提问来源于stack exchange,提问作者Dorian Turba
相关产品推荐
相关产品推荐

