Задача «Сценарий командной строки» просто запускает предоставленный сценарий как сценарий оболочки и проверяет его код завершения (ненулевое значение означает ошибку). Дело в том, что код выхода скрипта является кодом выхода последнего оператора, и по умолчанию (если не указана опция -e
) оболочка будет работать независимо от ошибок, а именно:
Сбой команды
Содержание шага:
make -f nonexisting.mk
Результат:
========================== Starting Command Output ===========================
/bin/bash --noprofile --norc /home/vsts/work/_temp/bc2da066-dd8a-432d-b15f-b9c2bf7a8e1f.sh
make: nonexisting.mk: No such file or directory
make: *** No rule to make target 'nonexisting.mk'. Stop.
##[error]Bash exited with code '2'.
Finishing: Command Line Script
Команде make
не удалось вернуть код завершения 2, и задача была помечена как неудачная. Следующие задачи были пропущены.
Ошибка команды перезаписана следующим оператором
Содержание шага:
make -f nonexisting.mk
echo Do whatever else
Результат:
========================== Starting Command Output ===========================
/bin/bash --noprofile --norc /home/vsts/work/_temp/0b2ceea2-2821-4866-83c7-5d37a832ffe5.sh
make: nonexisting.mk: No such file or directory
make: *** No rule to make target 'nonexisting.mk'. Stop.
Do whatever else
Finishing: Command Line Script
make
команда не удалось, но оболочка перешла к следующему оператору (echo
), который был успешным, следовательно, код завершения был 0, задача не была обнаружена, и конвейер успешно выполнен.
Включение остановки оболочки при ошибках
Содержание шага:
set -e
make -f nonexisting.mk
echo Do whatever else
Результат:
========================== Starting Command Output ===========================
/bin/bash --noprofile --norc /home/vsts/work/_temp/7f6644d3-408c-4b5b-b4d3-1f544e8a80ec.sh
make: nonexisting.mk: No such file or directory
make: *** No rule to make target 'nonexisting.mk'. Stop.
##[error]Bash exited with code '2'.
Finishing: Command Line Script
Оболочке было разрешено завершить работу при любой обнаруженной ошибке; при сбое команды make
выполнение сценария прекращается, команда echo
не выполняется, а код выхода является кодом завершения сбойной команды. Это снова обнаруживается задачей, и конвейер завершается.
Кстати. Это стандартный способ, которым Jenkins запускает сценарии оболочки, по умолчанию передавая -e
, поэтому он работает на Jenkins без каких-либо явных действий.
Возможно, вы захотите просмотреть свой сценарий задачи для команд, которые перезаписывают make
код выхода Возможно, set -e
в скрипте должно сработать, если вам не нужны более сложные логики c в самом скрипте.