travis: sh: 0: не могу открыть /etc/init.d/xvfb

Мой travis CI использует Ubuntu 14.04 и Node.js 8. Мой .travis.yml выглядит так:

language: node_js
node_js:
  - 8
sudo: required
addons:
    chrome: stable
before_script:
  - export DISPLAY=:99.0
  - sh -e /etc/init.d/xvfb start
install:
  - npm set progress=false
  - npm install
script:
  - ng lint
  - npm run test
  - npm run e2e
  - npm run build

Я попытался обновить его, чтобы использовать Ubuntu 16.04 и Node.js 10, изменив его на:

language: node_js
node_js:
  - '10'
dist: xenial
sudo: required
addons:
    chrome: stable
before_script:
  - export DISPLAY=:99.0
  - sh -e /etc/init.d/xvfb start
install:
  - npm set progress=false
  - npm install
script:
  - ng lint
  - npm run test
  - npm run e2e
  - npm run build

Однако теперь я получаю сообщение об ошибке при попытке запустить xvfb:

0,00s $ sh -e/etc/init.d/xvfb start

sh: 0: не могу открыть /etc/init.d/xvfb

Команда "sh -e/etc/init.d/xvfb start" завершилась неудачно и завершилась с 127 во время.

Ответ 1

Решением было удалить sh -e/etc/init.d/xvfb start из массива before_script и просто ввести xvfb в массив services.

Итак, мой .travis.yml теперь выглядит так:

language: node_js
node_js:
  - '10'
dist: xenial
sudo: required
services:
  - xvfb
addons:
    chrome: stable
before_script:
  - export DISPLAY=:99.0
install:
  - npm set progress=false
  - npm install
script:
  - ng lint
  - npm run test
  - npm run e2e
  - npm run build

Ответ 2

В дополнение к принятому ответу я бы сказал, что конфиг результата должен быть немного более понятным в соответствии с документами travis Использование xvfb для запуска тестов, требующих графического интерфейса. Вам не нужно устанавливать DISPLAY, поэтому раздел before_script становится чрезмерным:

Это работает только в Ubuntu 16.04 (Xenial) и более поздних выпусках, то есть с dist: xenial или dist: bionic
Следующее запустит xvfb и установит правильные значения для переменной среды DISPLAY...

Также вам не нужно указывать dist в 2019 году для node_js, потому что xenial теперь является изображением по умолчанию для языка node_js (blogpost). Ранее это был trusty, поэтому другим возможным решением было бы указать dist как trusty (см. doc). Но если говорить о дефолте, обсуждаемый конфиг может выглядеть как

language: node_js
node_js:
  - '10'
sudo: required
services:
  - xvfb
addons:
    chrome: stable
install:
  - npm set progress=false
  - npm install
script:
  - ng lint
  - npm run test
  - npm run e2e
  - npm run build