шутка из пряжи в Jenkinsfile получает «шутка: не найден» из одной ветви, успех из другой - PullRequest
0 голосов
/ 12 ноября 2018

Я очень опытный разработчик Java, и я много работал над автоматизацией сборки для сборок Java. Я мало что сделал с внешними сборками, поэтому я не знаком с проблемным пространством в большинстве внешних инструментов сборки.

В одной ситуации моя сборка из простого конвейерного скрипта в Jenkins завершается с ошибкой со следующим:

[xxx-feature%2F...] Running shell script
+ yarn test:coverage -u
yarn run v1.3.2
warning package.json: No license field
$ jest --env=jsdom --coverage -u
/bin/sh: 1: jest: not found

Это из сборки ветки запроса на извлечение. Тот же сценарий конвейера используется для сборки главной ветви, хотя он выполняет некоторые дополнительные шаги. Когда основная сборка достигает той же точки в сценарии, она не завершается ошибкой.

Этот сбой не относится только к конкретной ветви запроса на извлечение. Я видел эту же ошибку для многих сборок по запросу. Я сомневаюсь, что любой из них прошел.

Я сравнил файлы "package.json", и они идентичны.

На что еще мне следует обратить внимание, чтобы диагностировать эту проблему?

Обновление

Я не добился реального прогресса в этом. С тех пор я добавил дополнительную диагностику, которая выполняется как в сборке "master", так и в сборке "pull request". Я думал, что лучший шанс получить подсказку - запустить env прямо перед ним. К сожалению, я не увидел ничего полезного в этих незначительных различиях. PATH даже не установлен ни для одного.

Обновление

Просто чтобы подчеркнуть разницу, вот результат того же сценария конвейера в "основной" сборке:

[...] Running shell script
+ yarn --verbose test:coverage -u
yarn run v1.3.2
warning package.json: No license field
$ jest --env=jsdom --coverage -u
[BABEL] Note: The code generator has deoptimised the styling ...

Модульные тесты отлично работают в основной сборке, хотя не удается найти "шутку" в сборке PR.

Обновление

Комментатор подумал, что, возможно, здесь важна «установка пряжи». Сборка не запускает «установку пряжи» напрямую, но она запускает «пряжу», которая запускает «установку пряжи» под крышками. Я также отметил, что это была не первая команда «пряжи», которую она выполняла. Я просто изменил сценарий, чтобы сделать это первым, но это не решило проблему. Я собираюсь включить сюда сильно отредактированный вывод, показывающий «установку пряжи» вплоть до неудачного вызова. Возможно, в этом будет какая-то важная подсказка.

+ yarn
yarn install v1.3.2
warning package.json: No license field
[1/4] Resolving packages...
[2/4] Fetching packages...
info fsevents@1.2.4: The platform "linux" is incompatible with this module.
info "fsevents@1.2.4" is an optional dependency and failed compatibility check. Excluding it from installation.
[3/4] Linking dependencies...
warning " > react-router@4.3.1" has unmet peer dependency "react@>=15".
warning " > enzyme-adapter-react-16@1.7.0" has unmet peer dependency "react@^16.0.0-0".
warning " > enzyme-adapter-react-16@1.7.0" has unmet peer dependency "react-dom@^16.0.0-0".
warning "enzyme-adapter-react-16 > enzyme-adapter-utils@1.9.0" has unmet peer dependency "react@0.13.x || 0.14.x || ^15.0.0-0 || ^16.0.0-0".
warning "enzyme-adapter-react-16 > react-test-renderer@16.6.3" has unmet peer dependency "react@^16.6.3".
warning "jest > jest-cli > jest-environment-jsdom > jsdom > request-promise-native@1.0.5" has unmet peer dependency "request@^2.34".
warning "jest > jest-cli > jest-environment-jsdom > jsdom > request-promise-native > request-promise-core@1.1.1" has unmet peer dependency "request@^2.34".
[4/4] Building fresh packages...
Done in 29.01s.
+ yarn cache clean
yarn cache v1.3.2
warning package.json: No license field
success Cleared cache.
Done in 2.08s.
+ yarn clean:all
yarn run v1.3.2
warning package.json: No license field
$ yarn clean:lib && yarn clean:temp
warning package.json: No license field
$ rimraf ./build
/bin/sh: 1: rimraf: not found
error Command failed with exit code 127.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
+ yarn upgrade --scope @idp
yarn upgrade v1.3.2
warning package.json: No license field
[1/4] Resolving packages...
warning css-loader > cssnano > postcss-merge-rules > browserslist@1.7.7: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
warning css-loader > cssnano > autoprefixer > browserslist@1.7.7: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
warning css-loader > cssnano > postcss-merge-rules > caniuse-api > browserslist@1.7.7: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
warning enzyme > rst-selector-parser > nearley > nomnom@1.6.2: Package no longer supported. Contact support@npmjs.com for more info.
[2/4] Fetching packages...
info fsevents@1.2.4: The platform "linux" is incompatible with this module.
info "fsevents@1.2.4" is an optional dependency and failed compatibility check. Excluding it from installation.
[3/4] Linking dependencies...
warning " > react-router@4.3.1" has unmet peer dependency "react@>=15".
warning " > enzyme-adapter-react-16@1.7.0" has unmet peer dependency "react@^16.0.0-0".
warning " > enzyme-adapter-react-16@1.7.0" has unmet peer dependency "react-dom@^16.0.0-0".
warning "enzyme-adapter-react-16 > enzyme-adapter-utils@1.9.0" has unmet peer dependency "react@0.13.x || 0.14.x || ^15.0.0-0 || ^16.0.0-0".
warning "enzyme-adapter-react-16 > react-test-renderer@16.6.3" has unmet peer dependency "react@^16.6.3".
warning "jest > jest-cli > jest-environment-jsdom > jsdom > request-promise-native@1.0.5" has unmet peer dependency "request@^2.34".
warning "jest > jest-cli > jest-environment-jsdom > jsdom > request-promise-native > request-promise-core@1.1.1" has unmet peer dependency "request@^2.34".
[4/4] Rebuilding all packages...
success Saved lockfile.
success Saved 1294 new dependencies.
├─ @types/jest@21.1.10
├─ babel-jest@22.4.4
├─ babel-plugin-jest-hoist@22.4.4
├─ babel-preset-jest@22.4.4
├─ jest-changed-files@22.4.3
├─ jest-cli@22.4.4
├─ jest-config@22.4.4
├─ jest-diff@22.4.3
├─ jest-docblock@22.4.3
├─ jest-environment-jsdom@22.4.3
├─ jest-environment-node@22.4.3
├─ jest-get-type@22.4.3
├─ jest-haste-map@22.4.3
├─ jest-jasmine2@22.4.4
├─ jest-leak-detector@22.4.3
├─ jest-matcher-utils@22.4.3
├─ jest-message-util@22.4.3
├─ jest-mock@22.4.3
├─ jest-regex-util@22.4.3
├─ jest-resolve-dependencies@22.4.3
├─ jest-resolve@22.4.3
├─ jest-runner@22.4.4
├─ jest-runtime@22.4.4
├─ jest-serializer@22.4.3
├─ jest-snapshot@22.4.3
├─ jest-util@22.4.3
├─ jest-validate@22.4.4
├─ jest-worker@22.4.3
├─ jest@22.4.4
├─ ts-jest@22.4.6
Done in 49.89s.
+ yarn upgrade --scope @idse
yarn upgrade v1.3.2
warning package.json: No license field
[1/4] Resolving packages...
warning css-loader > cssnano > postcss-merge-rules > browserslist@1.7.7: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
warning css-loader > cssnano > postcss-merge-rules > caniuse-api > browserslist@1.7.7: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
warning css-loader > cssnano > autoprefixer > browserslist@1.7.7: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
warning enzyme > rst-selector-parser > nearley > nomnom@1.6.2: Package no longer supported. Contact support@npmjs.com for more info.
[2/4] Fetching packages...
info fsevents@1.2.4: The platform "linux" is incompatible with this module.
info "fsevents@1.2.4" is an optional dependency and failed compatibility check. Excluding it from installation.
[3/4] Linking dependencies...
warning " > react-router@4.3.1" has unmet peer dependency "react@>=15".
warning " > enzyme-adapter-react-16@1.7.0" has unmet peer dependency "react@^16.0.0-0".
warning " > enzyme-adapter-react-16@1.7.0" has unmet peer dependency "react-dom@^16.0.0-0".
warning "enzyme-adapter-react-16 > enzyme-adapter-utils@1.9.0" has unmet peer dependency "react@0.13.x || 0.14.x || ^15.0.0-0 || ^16.0.0-0".
warning "enzyme-adapter-react-16 > react-test-renderer@16.6.3" has unmet peer dependency "react@^16.6.3".
warning "jest > jest-cli > jest-environment-jsdom > jsdom > request-promise-native@1.0.5" has unmet peer dependency "request@^2.34".
warning "jest > jest-cli > jest-environment-jsdom > jsdom > request-promise-native > request-promise-core@1.1.1" has unmet peer dependency "request@^2.34".
[4/4] Rebuilding all packages...
success Saved lockfile.
success Saved 1294 new dependencies.
├─ @types/jest@21.1.10
├─ babel-jest@22.4.4
├─ babel-plugin-jest-hoist@22.4.4
├─ babel-preset-jest@22.4.4
├─ jest-changed-files@22.4.3
├─ jest-cli@22.4.4
├─ jest-config@22.4.4
├─ jest-diff@22.4.3
├─ jest-docblock@22.4.3
├─ jest-environment-jsdom@22.4.3
├─ jest-environment-node@22.4.3
├─ jest-get-type@22.4.3
├─ jest-haste-map@22.4.3
├─ jest-jasmine2@22.4.4
├─ jest-leak-detector@22.4.3
├─ jest-matcher-utils@22.4.3
├─ jest-message-util@22.4.3
├─ jest-mock@22.4.3
├─ jest-regex-util@22.4.3
├─ jest-resolve-dependencies@22.4.3
├─ jest-resolve@22.4.3
├─ jest-runner@22.4.4
├─ jest-runtime@22.4.4
├─ jest-serializer@22.4.3
├─ jest-snapshot@22.4.3
├─ jest-util@22.4.3
├─ jest-validate@22.4.4
├─ jest-worker@22.4.3
├─ jest@22.4.4
├─ ts-jest@22.4.6
Done in 34.56s.
+ yarn --verbose test:coverage -u
yarn run v1.3.2
$ jest --env=jsdom --coverage -u
/bin/sh: 1: jest: not found
verbose 0.383 Error: Command failed with exit code 127.
    at /usr/share/yarn/lib/cli.js:35620:15
    at Generator.throw (<anonymous>)
    at step (/usr/share/yarn/lib/cli.js:92:30)
    at /usr/share/yarn/lib/cli.js:105:13
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:188:7)
error Command failed with exit code 127.

Обновление

Комментатор попросил меня показать содержимое "node_modules / .bin". Я добавил это, а также содержимое другого каталога, указанного в этом списке.

+ ls -lt node_modules/.bin
total 0
lrwxrwxrwx 1 81050 20059 18 Dec  3 17:25 which -> ../which/bin/which
lrwxrwxrwx 1 81050 20059 47 Dec  3 17:25 webpack-dev-server -> ../webpack-dev-server/bin/webpack-dev-server.js
...
lrwxrwxrwx 1 81050 20059 35 Dec  3 17:25 jest-runtime -> ../jest-runtime/bin/jest-runtime.js
lrwxrwxrwx 1 81050 20059 23 Dec  3 17:25 jest -> ../jest-cli/bin/jest.js
...
+ ls -lt node_modules/jest-cli/bin
total 4
-rwxr-xr-x 1 81050 20059 416 Dec  3 17:25 jest.js

Я не вижу здесь ничего плохого.

Обновление

Я только что нашел решение для этого, но я все еще не понимаю, что является основной причиной.

Я боролся с этим почти месяц без разрешения, а затем в пятницу я заметил, что две сборки одного и того же запроса на получение разрешения прошли через это. Сборки, которые запускались после сборок для этого PR, продолжали давать сбой. Я перенес одну из прошедших сборок, и она прошла снова. В изменениях в пиаре не было ничего существенного. Единственной вещью, которая вообще отличалась от всех других PR, была форма названия отделения.

Почти все другие ветки в этом проекте имели форму "feature / ..." или "bugfix / ...", или "release / ...". Тот, кто прошел, использовал имя без "/" в нем. У меня есть механизм в скрипте сборки, который гарантирует, что рабочие пространства для сборок PR уникальны, добавляя имя ветви в каталог рабочей области, но так как я не хотел, чтобы «feature /» представлял уровень каталога, я сначала URL-адрес кодирую имя ветви, в результате чего "feature% 2F ...". Я делаю это в наших сборках на основе Java, и это прекрасно работает.

Поскольку к этому моменту я был почти уверен, что я знал, что это как-то вызывает проблему, я изменил сценарий, вместо этого просто заменив «/» на «-». Это решило проблему. Понятия не имею, почему.

...