如何配置TravisCI使其并行执行flow、lint和test任务?
让Travis CI中的Yarn脚本并行运行的方法
嘿,当然有办法让这些任务并行执行!在Travis CI里实现脚本并行跑有几种实用的方案,我给你详细说说:
方案一:直接用Shell后台命令 + wait
Travis的script段本质是在Shell环境下执行命令,所以可以利用Shell的后台运行特性来实现并行。你只需要把每个任务后面加上&让它在后台跑,最后用wait命令等待所有后台任务完成:
script: - yarn lint & - yarn flow & - yarn test --runInBand & - wait
注意点:
- 这种方式下,所有任务会同时启动,但如果其中某个任务失败,Travis不会立刻终止整个流程,会等所有后台任务都跑完才会标记构建失败。
- 并行运行时,各个任务的日志会混合输出,Travis会自动给不同进程的日志加上前缀区分,但可读性可能会稍差一点。
方案二:用npm-run-all工具(Yarn兼容)
如果想要更可控的并行执行(比如某个任务失败时立刻终止其他任务),可以用专门的脚本并行工具npm-run-all,Yarn也能直接使用它:
- 先安装依赖(可以加到devDependencies里):
yarn add --dev npm-run-all
- 在你的
package.json里添加一个专门的CI并行脚本:
"scripts": { "ci:parallel": "npm-run-all --parallel lint flow test:ci", "test:ci": "yarn test --runInBand" }
- 然后修改Travis配置:
script: yarn ci:parallel
优势:
--parallel参数会让指定的脚本同时启动,一旦其中任何一个脚本失败,工具会立刻终止所有其他运行中的脚本,更符合CI的快速失败原则。- 日志输出会更规整,每个任务的日志会被分组显示(部分终端支持),可读性更好。
这两种方案都能满足你的需求,看你更倾向于轻量的Shell原生方式,还是更可控的工具方式啦~
内容的提问来源于stack exchange,提问作者Kenneth Truong
相关产品推荐
相关产品推荐

