Получение кода ошибки оболочки из curl в Jenkins при отображении вывода в консоли - PullRequest
2 голосов
/ 23 сентября 2011

Я использую сценарий оболочки в 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 + показалась мне хакерской.

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

Ответы [ 2 ]

3 голосов
/ 23 сентября 2011

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

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

0 голосов
/ 23 сентября 2011

Задумывались ли вы об использовании плагина Publish over SSH вместо curl? Может избавить вас от головной боли.

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

Пока что не можете писать комментарии, поэтому я должен был опубликовать это как ответ.

...