如何在被忽略失败的Drone流水线故障时触发后续流水线?
问题修复方案
问题原因
你给第一条流水线设置failure: ignore后,Drone会强制将这条流水线的执行状态标记为成功,导致后续流水线的when: status: failure条件无法匹配,自然无法触发。
方案1:改用failure: continue(推荐)
将第一条流水线的failure: ignore替换为failure: continue,这样既会保留流水线的失败状态,又不会中断整个构建流程:
- name: 'My ignored pipeline' failure: continue
后续流水线的配置无需修改,when: status: failure会正确检测到第一条流水线的失败并触发执行。
如果需要确保整个构建的最终状态不为失败,可以在后续流水线中添加failure: ignore:
- name: 'Follow up pipeline' ...related configs... failure: ignore when: status: - failure depends_on: - My ignored pipeline
方案2:保留failure: ignore,通过自定义状态标记触发
如果必须保留failure: ignore,可以通过工件传递执行状态标记,手动判断第一条流水线的实际结果:
第一条流水线配置
- name: 'My ignored pipeline' failure: ignore steps: - name: execute-task commands: - # 你的核心任务命令 - echo $? > pipeline_status.txt # 保存任务执行状态码(0为成功,非0为失败) artifacts: - path: pipeline_status.txt
后续流水线配置
- name: 'Follow up pipeline' depends_on: - My ignored pipeline steps: - name: check-and-execute commands: - drone download "My ignored pipeline" pipeline_status.txt - if [ $(cat pipeline_status.txt) -ne 0 ]; then # 在这里编写第一条流水线失败时需要执行的逻辑 fi
内容的提问来源于stack exchange,提问作者Emad Armoun
相关产品推荐
相关产品推荐

