我们要使用travis-ci作为CI / CD构建一个nodeJS应用。
我们首先将管道设计如下:
language: node_js
sudo: false
node_js:
- 'lts/carbon'
- 'lts/*'
script:
- yarn install
- yarn lint
- yarn test:ci
它运行良好,并生成了2个travis构建,每个节点版本一个,运行我们的自定义脚本定义(install
,lint
然后是test:ci
)
然后我们尝试改善我们的流程,以添加docker构建步骤
language: node_js
sudo: false
node_js:
- 'lts/carbon'
- 'lts/*'
services:
- docker
stages:
- test
- dockerbuild
jobs:
include:
- stage: test
script:
- yarn install
- yarn lint
- yarn test:ci
- stage: dockerbuild
if: branch = master
script:
- docker build -t our-package .
我们遇到了第二个定义的问题。
Travis产生3个并行作业:
lts/carbon
运行默认travis测试脚本的程序:yarn test
lts/*
运行默认travis测试脚本的程序:yarn test
lts/carbon
运行我们想要的脚本install
,lint
然后运行test:ci
还有一个单独的dockerbuild阶段。
为什么travis会忽略我们的自定义脚本并触发一些运行默认nodeJS测试脚本的并行作业?
以及如何强制travis在所有经过测试的节点版本中使用我们的自定义脚本?