Получение кода ошибки оболочки из curl в Jenkins при отображении вывода в консоли

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

Сначала я попытался использовать curl -f, но это приводит к тому, что канал обрывается, как только загрузка завершается неудачно, и вывод ошибки никогда не доходит до клиента. Затем я попробовал что-то вроде этого:

curl ...params... | tee /dev/tty | \
  xargs -I{} test "Expected output string" = '{}'

Это работает из обычной оболочки SSH, но в выводе консоли Jenkins я вижу:

tee: /dev/tty: No such device or address

Я не уверен, почему это так, поскольку я думал, что Дженкинс общается с подчиненным, используя обычную оболочку SSH. В любом случае, вся эта штука с xargs + test кажется мне чем-то вроде взлома.

Есть ли способ сделать это в Jenkins, чтобы я мог видеть вывод, а также проверять, соответствует ли он определенной строке?


person Matthew Gertner    schedule 23.09.2011    source источник


Ответы (2)


Когда Jenkins связывается с подчиненным через SSH, терминал не выделяется, поэтому для этого процесса нет /dev/tty устройства.

Может быть, вы могли бы вместо этого отправить его /dev/stderr? Это будет терминал в интерактивном сеансе и некоторый файл журнала в неинтерактивном сеансе.

person Michał Šrajer    schedule 23.09.2011
comment
Я до сих пор не понимаю, почему /dev/stdout не работает, но спасибо, /dev/stderr работает нормально и пишет в консоль Jenkins. - person Matthew Gertner; 27.09.2011

Думали ли вы об использовании плагина публикации через SSH? использования завитка? Может избавить вас от головной боли.

Если вы просто скопируете файл с главного на подчиненный, для этого также есть плагин, копировать в подчиненный плагин.

Пока не могу писать комментарии, поэтому мне пришлось опубликовать это как ответ.

person pushy    schedule 23.09.2011
comment
Я не могу публиковать через SSH, но если есть способ сделать это как HTTP POST, то это может быть интересной альтернативой. Я просмотрел список плагинов Jenkins, но ничего не бросилось мне в глаза. - person Matthew Gertner; 23.09.2011