Номер сборки Jenkins в сценарии Power Shell

При запуске скрипта Power Shell

curl -X POST --data-urlencode 'payload={"channel": "#personal", "username": "Jenkins", "text": "Building $env:BUILD_NUMBER", "icon_emoji": ":computer:"}' https://xxxxxx.slack.com/services/hooks/incoming-webhook?token=aseaUO

or

curl -X POST --data-urlencode 'payload={"channel": "#personal-notification", "username": "Jenkins", "text": "Building ${BUILD_NUMBER}", "icon_emoji": ":computer:"}' https://xxxxxx.slack.com/services/hooks/incoming-webhook?token=aseaUO

{BUILD_NUMBER} не заменяется фактическим номером сборки в полезной нагрузке curl.

--Edit Я заметил, что мой сценарий sh вызывает git\bin\sh.exe. это проблема?

При попытке выполнить один из приведенных ниже комментариев curl -X POST --data-urlencode $('payload={0}"channel": "#personal", "username": "Jenkins", "text": "Building {1} ", "icon_emoji": ":computer:"{2}' -f "{", $env:rohan) "}" https://xxxxxx.slack.com/services/hooks/incoming-webhook?token=aseaUO я получаю

введите здесь описание изображения

При прямой попытке запустить скрипт на терминале PS я получаю

введите здесь описание изображения


person Rohan Sharma    schedule 27.09.2014    source источник
comment
Номер сборки определяется в глобальной переменной окружения env: или в переменной psvariable variable:? Попробуйте вот это: ${env:BUILD_NUMBER}   -  person walid toumi    schedule 27.09.2014


Ответы (2)


несколько проблем в вашем коде, во-первых, кавычки (переменная в ps не раскрывается в кавычках), во-вторых, (глупый) параметр ... попробуйте с этим, если не сработало, измените Build_Number на $ {BUILD_NUMBER}

$param = @()
$param = "-X POST"
$param += "--data-urlencode 'payload={""channel"": ""#personal"", ""username"": ""Jenkins"", ""text"": ""Building ${env:BUILD_NUMBER}", ""icon_emoji"": "":computer:""}'"
$param += "https://xxxxxx.slack.com/services/hooks/incoming-webhook?token=aseaUO"
$curl $param

Or

$param = ''
$param = "-X POST"
$param += "--data-urlencode 'payload={""channel"": ""#personal"", ""username"": ""Jenkins"", ""text"": ""Building ${env:BUILD_NUMBER}", ""icon_emoji"": "":computer:""}'"
$param += "https://xxxxxx.slack.com/services/hooks/incoming-webhook?token=aseaUO"
$curl $param
person walid toumi    schedule 27.09.2014
comment
Я не упомянул выше, но есть еще одна странная проблема с моей исходной командой. - Я не могу запустить его напрямую в Power Shell. Я получаю сообщение об ошибке несопоставленной закрытой скобки в позиции 42. Но когда я помещаю ее в файл .sh и вызываю ее, она вызывает окно терминала (не PS) и запускается. Я так и не понял, почему так происходит. В вашем случае переменная теперь отлично анализируется. Но моя старая ошибка вернулась. Несмотря на то, что я запускаю его из файла .sh, терминал запускается и показывает сообщение, которое слишком быстро читается, прежде чем оно исчезнет, ​​и оно не работает. - person Rohan Sharma; 28.09.2014

Проблема в том, что все выражение заключено в одинарные кавычки, поэтому PowerShell не будет оценивать ваше выражение $env:BUILD_NUMBER.

Используйте выражение форматирования строки. NB вы также должны использовать форматирование, чтобы символы {} не попадали в базовое выражение, чтобы избежать ошибок во время выполнения.

 curl -X POST --data-urlencode $('payload={0}"channel": "#personal", "username": "Jenkins", "text": "Building {1}", "icon_emoji": ":computer:"{2}' -f "{", $env:BUILD_NUMBER) ,"}") https://xxxxxx.slack.com/services/hooks/incoming-webhook?token=aseaUO
person Stephen Connolly    schedule 27.09.2014
comment
Нет не решает. Ошибка при форматировании строки - person Rohan Sharma; 27.09.2014
comment
Ах. Возможно, фигурные скобки портят позиционное форматирование. - person Stephen Connolly; 27.09.2014
comment
@walid находится на правильном пути, разбивая аргументы curl на массив. Если фигурные скобки вызывают хаос с оператором -f, вам придется создавать строку по крупицам или использовать много экранирования. - person Stephen Connolly; 27.09.2014
comment
Думаю проблема в другом. Я отредактировал сообщение с дополнительной информацией. Надеюсь, это покажет вашим экспертным глазам, где это на самом деле. - person Rohan Sharma; 28.09.2014
comment
Виноват. Я пропустил ) после -f и перед URL - person Stephen Connolly; 28.09.2014
comment
И запятая после env - person Stephen Connolly; 28.09.2014
comment
Поразмыслив, почему вы вообще запускаете curl из powershell, когда можете использовать invoke-webrequest - person Stephen Connolly; 28.09.2014
comment
Я именно так и решил. Но это был второй раз, когда я застрял в такой оболочке, как это было опубликовано. интересно, почему он так себя ведет. - person Rohan Sharma; 10.10.2014