GitLab流水线中如何在条件手动阶段完成后运行后续打标签任务
解法1(推荐,适用于 GitLab 14.3 及以上版本)
GitLab 原生已支持可选依赖配置,只需要给needs的每个依赖项添加optional: true属性,即可实现「作业存在就依赖,不存在就自动忽略」的逻辑,不会抛出配置错误。
最终的打标签作业配置如下:
# Create Tag Stage create tag with all packages: stage: create tag script: - git tag needs: - job: "publish package a" optional: true - job: "publish package b" optional: true - job: "publish package c" optional: true # 可选补充规则:三个目录都无修改时,不创建当前作业避免空跑 rules: - changes: - a/**/* - b/**/* - c/**/* when: on_success
该配置下,打标签作业会自动等待所有已存在的publish手动作业执行成功后,才会触发运行。
解法2(兼容低版本 GitLab <14.3)
如果使用的GitLab版本不支持optional属性,可以不用配置needs,直接利用GitLab阶段默认串行执行的特性,只需要修改.publish模板的规则,添加allow_failure: false即可:
.publish: stage: publish script: - publish x rules: - changes: - $DIR/**/* when: manual allow_failure: false # 关键配置:标记手动作业不允许失败,流水线会等待该作业执行完成才进入下一阶段
该配置下,create tag阶段的作业会自动等待publish阶段所有已存在的手动作业执行成功后才启动,不会因为部分publish作业不存在报错。如果需要避免三个目录都无修改时打标签作业空跑,同样可以给打标签作业添加上方解法1中的rules配置。
内容的提问来源于stack exchange,提问作者kitchra
相关产品推荐
相关产品推荐

