Travis CI矩阵中阶段执行失败,默认脚本异常排查
搞定Travis CI矩阵与Stages的执行问题
嘿,我看你在Travis CI里用stages和矩阵的时候踩坑了——除了一个任务,其余全在跑默认的npm run test,完全没按你定义的阶段来执行对吧?这问题我之前也碰到过,核心原因是矩阵生成的任务没和你指定的stages绑定好,而且jobs的配置也不完整。下面给你一步步解决的方案:
1. 补全Jobs配置,把矩阵任务绑定到对应Stage
你现在的jobs部分没写完,得明确把每个阶段的任务(包括矩阵里的组件和Node版本)都定义清楚,同时覆盖默认脚本。比如改成这样:
if: tag IS blank git: depth: 1 sudo: false matrix: fast_finish: true cache: yarn language: node_js node_js: - "node" - "lts/*" env: - COMPONENT=@emmanuelgautier/lerna-example-hapi - COMPONENT=@emmanuelgautier/lerna-example-react-app - COMPONENT=@emmanuelgautier/lerna-example-validators stages: - test - build - name: publish if: branch = master jobs: include: # 把所有矩阵任务归到test阶段,自定义测试脚本 - stage: test script: npm run test -- $COMPONENT # 针对每个指定组件跑测试 # 为每个组件单独配置build阶段任务 - stage: build node_js: "node" env: COMPONENT=@emmanuelgautier/lerna-example-hapi script: npm run build -- $COMPONENT - stage: build node_js: "node" env: COMPONENT=@emmanuelgautier/lerna-example-react-app script: npm run build -- $COMPONENT - stage: build node_js: "node" env: COMPONENT=@emmanuelgautier/lerna-example-validators script: npm run build -- $COMPONENT # Publish阶段只在master分支执行 - stage: publish node_js: "node" script: npm run publish -- $COMPONENT
2. 关键细节说明
- 矩阵任务的默认归属:Travis默认会把所有matrix生成的任务丢到第一个stage(也就是你的
test阶段),如果不自定义script,就会自动跑npm run test。所以必须在jobs.include里明确指定test阶段的脚本,让它针对每个COMPONENT执行测试。 - Build阶段的灵活配置:上面的例子是给每个组件单独写build任务,如果你想让每个Node版本都跑build,可以把node_js也加到build的任务矩阵里(后面会说简化写法)。
- Publish的条件控制:你已经给publish阶段加了
if: branch = master的限制,这很好,能确保只有master分支才会触发发布,避免误操作。
3. 简化矩阵与Stage的关联(可选)
如果不想手动写每个build任务,可以用嵌套矩阵的方式,让Travis自动生成build阶段的所有组合:
jobs: include: - stage: test script: npm run test -- $COMPONENT - stage: build script: npm run build -- $COMPONENT # 复用顶层的node_js和env矩阵,自动生成所有组合 node_js: - "node" - "lts/*" env: - COMPONENT=@emmanuelgautier/lerna-example-hapi - COMPONENT=@emmanuelgautier/lerna-example-react-app - COMPONENT=@emmanuelgautier/lerna-example-validators - stage: publish script: npm run publish -- $COMPONENT if: branch = master node_js: "node"
这样Travis会自动为build阶段生成6个任务(2个Node版本 × 3个组件),你可以根据实际需求决定要不要多版本的build。
4. 验证配置
改完配置后,你可以用Travis提供的配置检查功能(在Travis官网的仓库设置里就能找到),确认配置没有语法错误。之后提交修改到仓库,触发新构建,就能看到各个阶段的任务按预期执行啦。
内容的提问来源于stack exchange,提问作者Emmanuel
相关产品推荐
相关产品推荐

