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

GitLab CI如何实现仅运行一个手动任务,运行后禁用其他任务?

解决方案

要实现“选择一个手动任务执行后禁用其余任务”的需求,你可以通过前置选择job+变量匹配规则来实现,具体配置调整如下:

步骤1:新增版本类型选择job

先添加一个手动触发的job,让开发者选择要发布的版本类型(patch/minor/major),并通过变量传递选择结果:

choose_release_type:
  stage: deploy
  image: alpine:latest
  script:
    - echo "即将发布 $RELEASE_TYPE 版本"
  rules:
    - if: $CI_MERGE_REQUEST_ID || $CI_COMMIT_BRANCH
      when: manual
      variables:
        RELEASE_TYPE: "patch"  # 设置默认选项,执行时可手动修改为minor/major
      allow_failure: false

步骤2:修改三个发布job的规则

让三个发布job依赖上述选择job,并通过rules判断变量是否匹配自身类型,仅匹配的job可手动触发,其余直接禁用:

publish_patch:
  stage: deploy
  image: node:latest
  needs: [choose_release_type]
  before_script:
    - cp $SCRT_NPMRC_TOKEN .npmrc
  script:
    - npm version patch
    - npm publish
    - git checkout main
    - git add package.json package-lock.json
    - git commit -m "automatic version commit" 
    - git push -o ci.skip
  rules:
    - if: $RELEASE_TYPE == "patch"
      when: manual
    - when: never

publish_minor:
  stage: deploy
  image: node:latest
  needs: [choose_release_type]
  before_script:
    - cp $SCRT_NPMRC_TOKEN .npmrc
  script:
    - npm version minor
    - npm publish
    - git checkout main
    - git add package.json package-lock.json
    - git commit -m "automatic version commit" 
    - git push -o ci.skip
  rules:
    - if: $RELEASE_TYPE == "minor"
      when: manual
    - when: never

publish_major:
  stage: deploy
  image: node:latest
  needs: [choose_release_type]
  before_script:
    - cp $SCRT_NPMRC_TOKEN .npmrc
  script:
    - npm version major  # 修正原配置中的错误:此处应该是major而非patch
    - npm publish
    - git checkout main
    - git add package.json package-lock.json
    - git commit -m "automatic version commit" 
    - git push -o ci.skip
  rules:
    - if: $RELEASE_TYPE == "major"
      when: manual
    - when: never

工作流程说明

  1. 触发流水线后,只有choose_release_type是可手动触发的任务;
  2. 执行该任务时,修改RELEASE_TYPE变量为想要发布的版本类型(patch/minor/major)并启动;
  3. 完成后,只有与RELEASE_TYPE匹配的发布job会变为可手动触发状态,另外两个job因rules: when: never被禁用,无法运行。

另外注意修正原配置中publish_major的script错误,将npm version patch改为npm version major,否则发布major版本时会错误升级patch版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:05:26