Как предотвратить сбой PowerShell, если карма не прошла тесты - PullRequest
0 голосов
/ 15 января 2019

Задача

Когда я запускаю Karma через PowerShell для базовой ветки, PowerShell реагирует аналогично, как если бы Environment::Exit(1) было выполнено, если в результатах есть какие-либо неудачные тесты. Это приводит к преждевременному сбою сборки Jenkins без запуска остальных компонентов. Я хочу обойти это так, что задание не будет выполнено, только если возникнет законная проблема, найдены неудачные тесты при запуске кармы для целевой ветви (ветвь, содержащая изменения кода), или процент покрытия кода для новых строк ниже требуемого минимума .

Фон

Я работаю с Jenkins, PowerShell и Karma, чтобы обеспечить тестирование покрытия кода для веб-приложения. В Jenkins у меня есть задача PowerShell, которая выполняет карму следующим образом:

В задании я проверяю две ветви (одна служит базой, другая содержит обновления кода / теста). Я восстанавливаю все пакеты NuGet, затем строю решение Baseline Branch. Затем я запускаю карму, чтобы получить текущее освещение. Затем я создаю решение для Target Branch, а затем запускаю Karma для получения покрытия кода. Используя SonarQube, я сравниваю результаты, чтобы обеспечить покрытие новой линии.

Вещи, которые я уже пробовал:

  • добавление -ErrorAction SilentlyContinue
  • заглядывая в качественные ворота
  • поиск документации по karma start
  • добавление | $true и || $true в конец команды karma start

Пример кода

& $nodePath $karmaPath start $karmaTest --log-level debug

$nodePath - это просто путь к файлу node.exe

$karmaPath это просто путь к файлу кармы

$karmaTest - путь к файлу karma.conf.ci.js

1 Ответ

0 голосов
/ 17 января 2019

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

Чтобы обойти эту проблему, передайте команду после запуска тестового сценария. Например

Допустим, ваши скрипты определены в вашем package.json, примерно определенном ниже

scripts:{
ng: ng;
install: npm install;
test-ci: ng test --karma-config karmaconfig --code-coverage
build: npm build
}

Теперь ваш скрипт jenkins bash может выглядеть так, как показано ниже, используя скрипты, определенные в вашем package.json.

npm run install
npm run test-ci || echo "Tests Failed"
npm run build
...