Как лучше обработать команду, которая показывает ошибку в консоли, но возвращает выход 0 - PullRequest
0 голосов
/ 28 апреля 2020

У меня проблема с трубопроводом Дженкинса. В рамках нашего процесса развертывания существует сценарий bash, который выполняется для проверки файлов развертывания и развертывания в среде. В конце есть указанная команда c, которая использует инструмент cli поставщика для развертывания в нашей среде. Если в этой команде есть ошибка, она по-прежнему возвращает выход 0 и сборка не развертывается, но показывает, что задание успешно выполнено в Jenkins. Я думал о том, чтобы сделать оператор if как-то так, чтобы сбить задание при возникновении ошибки:

if $myCommand | grep -q '*** ERROR ***' &> /dev/null
then
    exit 1
fi

Я хочу, чтобы команда завершила работу sh и развернула ее, если ошибка не обнаружена в эта команда. У меня вопрос, будет ли это работать и / или есть ли лучший способ сделать это?

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

Или вы можете перехватить вывод, используя подстановку команд, и напечатать это сообщение, в противном случае, да, просто grep -q

output=$("$myCommand")
if [[ $output = *'*** ERROR ***'* ]]; then
   printf 'Uh oh, something went wrong!\n' >&2
   printf '%s\n' "$output" >&2
   exit 1
fi
  • Хотя это может сработать или любой другой ответ на этот пост, все же это это не решение, а просто лейкопластырь, правильное решение состоит в том, чтобы исправить программу / утилиту / команду, которая не дает должного статуса выхода, с которым вы можете действовать.
0 голосов
/ 28 апреля 2020

Это хороший способ сделать это, но ваш пример не grepping stderr, это всего лишь grepping stdout. Вы будете хотеть:

if $myCommand 2>&1 | grep ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...