如何在master分支测试失败时立即终止Ansible Playbook运行?
实现master分支测试失败时终止Ansible Playbook运行
完整实现代码
- name: 获取当前Git分支 shell: git rev-parse --abbrev-ref HEAD register: current_branch changed_when: false # 标记为无状态变更,避免每次执行都显示changed - name: 'Run Tests' shell: testing.sh | tee "testing.log" register: testing - name: 'Show log' debug: msg: "{{ testing.stdout_lines }}" - name: 'Set fact' set_fact: tests: >- {{ (testing.stdout_lines | join(' ') | regex_findall('(\d+)\s*failed') | map('int') | default([0], true)) | max == 0 }} - name: master分支测试失败时终止Playbook fail: msg: "master分支测试失败,立即终止Playbook运行" when: current_branch.stdout == 'master' and not tests
关键逻辑说明
- 分支判断:通过
git rev-parse --abbrev-ref HEAD获取当前工作分支,注册为current_branch,后续仅针对master分支执行终止逻辑。 - 测试结果校验:保留你原有的正则提取逻辑,同时添加
default([0], true)处理无匹配结果的场景(比如测试输出中没有"failed"关键字时,默认判定为0失败),避免max函数因空列表报错。 - 终止触发:使用Ansible的
fail模块,仅当当前是master分支且测试失败(not tests)时触发,直接终止Playbook运行并输出提示信息。
注意事项
- 确保
testing.sh的输出格式包含X failed这类可被正则匹配的字符串,否则校验逻辑会默认判定测试通过。 changed_when: false是可选优化,仅用于避免将"获取分支"的操作标记为状态变更,不影响核心功能。
内容的提问来源于stack exchange,提问作者scrapkowe
相关产品推荐
相关产品推荐

