如何在Travis多行脚本中使用travis_wait解决无输出超时问题
问题根因
你之前的两种写法出错的原因分别是:
- 第一种写法:
travis_wait必须跟随待执行的命令作为参数才能生效,单独写travis_wait 40没有绑定实际任务,会直接退出,后续的mvn命令没有被包裹,还是会触发无输出被杀的规则 - 第二种写法:shell解析命令时会把重定向符号
>作用于整个travis_wait进程,导致travis_wait本身用于保活的定时输出也被写入到文件中,Travis控制台依旧收不到任何日志,还是会触发超时销毁,同时也可能因为参数解析异常导致命令提前退出。
正确写法
你需要用bash -c把带重定向的mvn命令整合成独立参数传递给travis_wait,示例如下:
script: - | if [[ -z "$TRAVIS_TAG" ]]; then travis_wait 40 bash -c 'mvn clean install > output.txt' fi
说明
travis_wait会每隔一段时间自动输出简短的等待日志到Travis控制台,既不会产生过多冗余内容,也能避免触发10分钟无输出强制杀进程的规则- mvn的所有构建输出会完整重定向到
output.txt,完全满足你规避过长输出、不触碰4MB输出上限的需求 - 建议
travis_wait后的时长参数略大于本地运行的最长耗时,避免任务未完成就被提前终止 - 如果构建失败需要排查问题,可以在script块末尾按需添加
cat output.txt输出日志内容,不需要的话保留现有逻辑即可
内容的提问来源于stack exchange,提问作者AndrasCsanyi
相关产品推荐
相关产品推荐

