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

GitLab CI手动启动job时如何触发依赖job避免依赖被提前清理

GitLab CI手动触发stage依赖问题解决方案

手动启动stage时自动运行前置stage的实现

GitLab CI 14.10及以上版本原生支持该能力:

  • 网页端触发时,勾选界面上的*运行需要的前置作业(Run needed jobs)*选项,系统会自动识别目标stage下所有作业的依赖关系,重新执行缺失的前置步骤
  • API触发时,添加参数run_needed: true即可实现相同效果

其他可选解决方案

方案1:调整cleanup作业的触发规则

修改cleanup stage的触发逻辑,仅在手动stage执行完成后再运行清理操作,参考配置:

cleanup_job:
  stage: cleanup
  rules:
    # 定时流水线等不需要执行手动stage的场景直接清理
    - if: $CI_PIPELINE_SOURCE == "schedule"
      when: always
    # 正常流水线需等待手动作业执行成功后再清理
    - when: on_success
      needs: ["你的手动作业名称"]

如果不需要自动清理,也可以直接将cleanup作业设置为手动触发。

方案2:手动作业内置依赖拉取逻辑

给手动触发的作业单独配置依赖拉取步骤,不依赖全局前置拉取的结果。该方案无需调整原有流水线结构,兼容性最高,缺点是会重复执行依赖拉取操作。

方案3:依赖资源上传为流水线制品

将前置拉取的依赖打包上传为GitLab流水线制品,设置合理的过期时间,手动作业直接下载制品使用,不受本地清理操作影响,参考配置:

pull_deps:
  stage: deps
  script:
    - 拉取依赖的原有命令
    - tar -zcf deps_package.tar.gz 你的依赖目录
  artifacts:
    paths:
      - deps_package.tar.gz
    expire_in: 7d # 按需设置制品保留时间

manual_job:
  stage: manual_stage
  script:
    - tar -zxf deps_package.tar.gz
    - 手动作业的原有业务逻辑
  when: manual

方案4:拆分多流水线触发

将自动执行流程和手动触发流程拆分为独立流水线,主自动流水线不执行cleanup操作,手动触发时拉起包含依赖拉取、业务逻辑、清理步骤的独立子流水线。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:15:03