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
工作流程说明
- 触发流水线后,只有
choose_release_type是可手动触发的任务; - 执行该任务时,修改
RELEASE_TYPE变量为想要发布的版本类型(patch/minor/major)并启动; - 完成后,只有与
RELEASE_TYPE匹配的发布job会变为可手动触发状态,另外两个job因rules: when: never被禁用,无法运行。
另外注意修正原配置中publish_major的script错误,将npm version patch改为npm version major,否则发布major版本时会错误升级patch版本。
内容的提问来源于stack exchange,提问作者plumgod
相关产品推荐
相关产品推荐

