You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab CI配置:按Tag执行任务时根据Dockerfile存在性二选一

GitLab CI 按Dockerfile存在状态执行对应Job的正确配置

你需要实现的逻辑是:

  • 仅当项目中不存在Dockerfile且触发条件为Tag时,执行job01
  • 仅当项目中存在Dockerfile且触发条件为Tag时,执行job02
  • 两个Job互斥,同一触发场景下仅运行其一

当前配置的问题在于job01的rules是按顺序匹配的,第一条if: '$CI_COMMIT_TAG'会直接匹配所有Tag触发的场景,后续的when: never规则不会生效,导致有Dockerfile时job01依然会运行,和job02同时执行。

正确配置方案

利用GitLab CI rules的逻辑组合,将条件合并为单条规则,确保只有完全匹配时才执行Job:

job01:
  script:
    - echo "Dockerfile is not exists"
  rules:
    - if: '$CI_COMMIT_TAG'
      exists:
        - '!Dockerfile'  # 用!前缀表示匹配"不存在该文件"的场景
      when: on_success

job02:
  script:
    - echo "Dockerfile is exists"
  rules:
    - if: '$CI_COMMIT_TAG'
      exists:
        - Dockerfile
      when: on_success

配置说明

  • exists: ['!Dockerfile']:GitLab CI支持在文件路径前加!表示"该文件不存在",这是官方支持的反向匹配写法,无需额外指令
  • 每个Job的rules都只有一条匹配规则,确保只有当Tag条件和文件存在状态同时满足时,才会触发对应Job
  • 两个Job的条件完全互斥,同一触发场景下只会有一个Job被执行

内容的提问来源于stack exchange,提问作者Vasai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 18:43:16