Travis CI fast_finish配置验证及错误模拟方法咨询
Travis CI 配置问题解答
一、fast_finish 配置错了
fast_finish 是Jobs层级的全局设置,不能放在include的单个job里,正确配置应该是这样:
jobs: fast_finish: true include: - stage: test before_script: # do_something script: - ./first_script - ./second_script - ./third_script
另外要注意:fast_finish管的是同一阶段里多个并行job的快速结束——只要有一个job失败,整个阶段直接标记失败,不用等其他并行job跑完。但它管不了单个job内部的脚本执行顺序,也就是单个job里前一个脚本失败后,后面的脚本还是会继续跑,这不是fast_finish的作用范围。
二、要让单个阶段内脚本失败就停,得这么做
Travis的script段默认用bash执行,但默认没开set -e(errexit模式),所以前一个命令返回非0(失败),后面的命令照样跑。要实现“一个脚本失败就终止剩余脚本”,有两种简单方法:
方法1:开启bash的 errexit 模式
在script开头加set -e,这样只要任意命令返回非0,后续命令直接停:
script: - set -e - ./first_script - ./second_script - ./third_script
方法2:用&&串联所有脚本
把脚本用&&连起来,只有前一个成功,才会执行下一个:
script: - ./first_script && ./second_script && ./third_script
三、正确模拟脚本失败的姿势
你之前用travis_terminate 1其实是直接终止整个流水线,不是模拟单个脚本失败,所以感觉不对很正常。要测试脚本失败后的终止效果,直接用下面的方法就行:
- 直接返回非0状态码:比如在脚本中间加
exit 1,示例:script: - set -e - ./first_script - exit 1 # 模拟执行失败 - ./third_script # 这行根本不会跑 - 用必然失败的命令:比如
false(它的返回码固定是1):script: - set -e - ./first_script - false # 模拟失败 - ./third_script # 这行不会执行
如果确实需要终止整个流水线(不是单个job内的脚本),才用travis_terminate 1,但这不是模拟脚本失败的正确方式。
内容的提问来源于stack exchange,提问作者X T
相关产品推荐
相关产品推荐

