【问题标题】:Jenkins Build Number in power shell scriptpowershell脚本中的Jenkins内部版本号
【发布时间】:2014-09-27 11:06:12
【问题描述】:

关于运行 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

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 有效负载中的实际内部版本号替换

--编辑 我注意到我的 sh 脚本正在调用 git\bin\sh.exe。有问题吗?

在尝试以下 cmets 之一 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 终端上运行脚本时,我得到了

【问题讨论】:

  • Buildnumber 在全局环境变量env: 或psvariable variable: 中定义?试试这个:${env:BUILD_NUMBER}

标签: powershell curl jenkins slack-api


【解决方案1】:

您的代码中很少出现问题,首先是引号(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

或者

$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

【讨论】:

  • 我上面没有提到,但是我的原始命令还有一个奇怪的问题。 - 我不能直接在 Power Shell 上运行它。我在 pos 42 得到错误 unmatched closed bracket 但是当我把它放在一个 .sh 文件中并调用它时,它会调用一个终端(不是 PS)窗口并运行。我从来没有弄清楚为什么会发生这种情况。在您的情况下,该变量现在已被完美解析。但是我的旧错误又回来了。即使我从 .sh 文件运行它,终端也会启动并显示一条消息,该消息在消失之前太快无法阅读并且无法正常工作。
【解决方案2】:

问题是整个表达式都用单引号括起来,因此 PowerShell 不会评估您的 $env:BUILD_NUMBER 表达式。

使用字符串格式化表达式。注意,您还必须使用格式将 { } 字符保留在基本表达式之外以避免运行时错误。

 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

【讨论】:

  • 不解决不了。获取“错误格式字符串”错误
  • 啊。也许花括号与位置格式有关。
  • @walid 走在正确的轨道上,将 curl 参数分解为一个数组。如果花括号对 -f 运算符造成严重破坏,则您将不得不一点一点地构建字符串或使用大量转义
  • 我认为问题出在其他地方。我已经用更多信息编辑了帖子。希望这将向您的专家展示它的实际位置。
  • 我的错。我在 -f 之后和 url 之前错过了 )