Jenkins - Публикация результатов в задании внешнего мониторинга добавляет мусор в журнал заданий сборки
У меня есть задание внешнего монитора, которое я отправляю на него с помощью curl и base по этой ссылке:
После того, как я создаю задание, мне просто нужно выполнить команду curl с телом, закодированным в HEX, по указанному URL, а затем будет создана сборка, и результат будет добавлен к нему, но вместо этого я получаю часть вывода в открытом виде. текст и остальные странные символы, например, так:
Started
Asking akamai to purge this urls:
http://xxx/sites/all/modules/custom/uk.png http://aaaaaasites/all/modules/custom/flags/jp.png
<html><head><title>401 Unauthorized</title> </h�VC��&�G����CV�WF��&��VC�������R&R��BWF��&��VBF�66W72F�B&W6�W&6S�����&�G�����F����F�RW&�F �6�V6�7FGW2�bF�R&WVW7B�2��F�RF��RF�v�B�2��6�Ɩ�r&6�w&�V�B��"F�6�V6�7FGW2�bF�RF�6�W@�v�F��rf�"���F�W&vRF��6O request please keep in mind this is an estimated time
Waiting for another 60 seconds
Asking akamai to purge this urls:
...
..
..
Вот как я это делаю:
export output=`cat msg.out|xxd -c 256 -ps`
curl -k -X POST -d "<run><log encoding=\"hexBinary\">$output</log><result>0</result> <duration>2000</duration></run>" https://$jenkinsuser:$jenkinspass@127.0.0.1/jenkins/job/akamai_purge_results/postBuildResult -H'.crumb:c775f3aa15464563456346e'
Если я с этим файлом все в порядке, и даже если я отредактирую его с помощью vi, у меня не возникнет никаких проблем с ним.
Ребята, вы знаете, как это исправить?
Может ли быть проблема с шестнадцатеричной кодировкой? (Я пробовал страницы hex/enc/dec с результатом xxd, и они выглядят нормально)
Благодарю.
1 ответ
У меня была та же проблема, и я наткнулся на это: http://blog.markfeeney.com/2010/01/hexbinary-encoding.html
На этой странице вы можете получить нужную кодировку с помощью этой команды:
echo "Hello world" | hexdump -v -e '1/1 "%02x"'
48656c6c6f20776f726c640a
Выдержка из объяснения:
Так что, черт возьми, это? -v означает, что не подавляет дублирующиеся данные в выводе, а -e - строка формата. hexdump очень внимательно относится к форматированию аргумента -e; так осторожно с цитатами. Значение 1/1 для каждого 1 байта, обнаруженного на входе, применяет следующий шаблон форматирования 1 раз. Несмотря на то, что это звучит как поведение по умолчанию на странице руководства, 1/1 не является обязательным. / 1 также работает, но 1/1 очень, чуть-чуть более читабельно, IMO. "%02x" - это просто стандартный код формата printf.
Так что в вашем случае вы бы это сделали (убрав "export" в пользу встроенной переменной)
OUTPUT=`cat msg.out | hexdump -v -e '1/1 "%02x"'` curl -k -X POST -d "<run><log encoding=\"hexBinary\">$OUTPUT</log><result>0</result> <duration>2000</duration></run>" https://$jenkinsuser:$jenkinspass@127.0.0.1/jenkins/job/akamai_purge_results/postBuildResult -H'.crumb:c775f3aa15464563456346e'