Мы хотим создать приложение nodeJS, используя travis-ci в качестве CI / CD.
Сначала мы спроектировали наш конвейер следующим образом:
language: node_js
sudo: false
node_js:
- 'lts/carbon'
- 'lts/*'
script:
- yarn install
- yarn lint
- yarn test:ci
Он работал хорошо и произвел 2 travisсборки, по одной для каждой версии узла, с выполнением нашего пользовательского определения сценария (install
, lint
затем test:ci
)
Затем мы попытались улучшить наш процесс, добавив шаг сборки докера
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 использовать нашпользовательский скрипт во всех протестированных версиях узла?