Перво-наперво наведите указатель мыши на серую область ниже. Это не часть ответа, но абсолютно необходимо сказать:
Если у вас есть сценарий оболочки, который выполняет «проверку, сборку, развертывание» сам по себе, то почему вы используете Jenkins? Вы отказываетесь от всех функций Jenkins, которые делают его тем, чем он является. У вас также может быть хук после фиксации cron или SVN, напрямую вызывающий скрипт. Сам Дженкинс, выполняющий проверку SVN, имеет решающее значение. Это позволяет запускать сборки только при внесении изменений (или по таймеру, или вручную, если хотите). Он отслеживает изменения между сборками. Он показывает эти изменения, поэтому вы можете видеть, какая сборка для какого набора изменений. Он отправляет коммиттерам электронные письма, когда их изменения привели к успешной или неудачной сборке (опять же, в соответствии с вашими предпочтениями). Он отправит коммиттерам электронное письмо, когда их исправления исправят неудачную сборку. И еще и еще. Архивирование артефактов Дженкинсом также делает их доступными для каждой сборки прямо из Дженкинса. Хотя это не так важно, как проверка SVN, это снова неотъемлемая часть того, что делает его Jenkins. То же самое и с развертыванием. Если у вас нет единой среды, развертывание обычно происходит в нескольких средах. Jenkins может отслеживать, в какой среде развернута конкретная сборка (с определенным набором изменений SVN), с помощью рекламных акций. Вы отказываетесь от всего этого. Похоже, вам говорят «вы должны использовать Jenkins», но на самом деле вы этого не хотите, и вы делаете это только для того, чтобы избавиться от своих боссов, просто чтобы поставить галочку «да, я использовал Jenkins»
Короткий ответ: код выхода последней команды этапа сборки Jenkin Execute Shell определяет успех / неудачу этапа сборки . 0
- успех, anything else
- неудача. Обратите внимание, что это определяет успех / неудачу этапа сборки , а не всего выполнения задания . На успех / неудачу всего выполнения задания могут в дальнейшем повлиять несколько шагов сборки, а также действия и плагины после сборки.
Вы упомянули Build step 'Execute shell' marked build as failure
, поэтому мы сосредоточимся только на одном этапе сборки. Если на этапе сборки « Выполнить оболочку» есть только одна строка, которая вызывает сценарий оболочки, то код выхода сценария оболочки будет определять успех / сбой этапа сборки. Если после выполнения сценария оболочки у вас осталось больше строк, внимательно просмотрите их, поскольку именно они могут вызывать сбой.
Наконец, прочтите здесь Jenkins Build Script завершается после выполнения Google Test . Это не имеет прямого отношения к вашему вопросу, но обратите внимание на то, что Дженкинс запускает этап сборки Execute Shell в виде сценария оболочки с/bin/sh -xe
В -e
означает , что сценарий оболочки будет выйти из неудачи, даже если только одна команды выходит из строя, даже если вы делаете проверку ошибок для этой команды (из - за выходы сценария , прежде чем он доберется до вашей проверки ошибок). Это противоречит нормальному выполнению сценариев оболочки, которые обычно выводят сообщение об ошибке для неудачной команды (или перенаправляют его на null и обрабатывают другими способами) и продолжают.
Чтобы обойти это, добавьте set +e
в начало сценария оболочки.
Поскольку вы говорите, что ваш сценарий делает все, что от него требуется, скорее всего, сбойная команда находится где-то в конце сценария. Может, финальное эхо? Или где-нибудь скопировать артефакты? Не видя полного вывода консоли, мы просто предполагаем.
Пожалуйста, опубликуйте вывод консоли выполнения задания и, желательно, сам сценарий оболочки, и тогда мы сможем вам точно сказать, какая строка не работает.