Teamcity 团队城市。命令行生成步骤。setParameter始终显示";不正确的属性名称“;错误

Teamcity 团队城市。命令行生成步骤。setParameter始终显示";不正确的属性名称“;错误,teamcity,Teamcity,我正在尝试使用命令行构建步骤填充一些参数 代码如下: #!/bin/bash -x VERSIONCODE=123 VERSIONNAME=1.2.0 echo "##teamcity[setParameter name='env.VERSION_NAME' value='$VERSIONNAME']" echo "##teamcity[setParameter name='env.VERSION_CODE' value='$VERSIONCODE']" 生成日志: [09:14:06][

我正在尝试使用命令行构建步骤填充一些参数

代码如下:

#!/bin/bash -x
VERSIONCODE=123 
VERSIONNAME=1.2.0
echo "##teamcity[setParameter name='env.VERSION_NAME' value='$VERSIONNAME']" 
echo "##teamcity[setParameter name='env.VERSION_CODE' value='$VERSIONCODE']"
生成日志:

[09:14:06][Step 1/8] + VERSIONCODE=123 
[09:14:06][Step 1/8] + VERSIONNAME=1.2.0 
[09:14:06][Step 1/8] + echo ' 
[09:14:06][Step 1/8] ##teamcity[setParameter name='\''env.VERSION_NAME'\'' value='\''1.2.0'\''] 
[09:14:06] 
[Step 1/8] Incorrect property name. 
Valid property list format is (name( )*=( )*'escaped_value'( )*)* where escape symbol is "|" 
[09:14:06][Step 1/8] ' 
[09:14:06][Step 1/8] + echo ' 
[09:14:06][Step 1/8] ##teamcity[setParameter name='\''env.VERSION_CODE'\'' value='\''123'\''] 
[09:14:06] 
[Step 1/8] Incorrect property name. 
Valid property list format is (name( )*=( )*'escaped_value'( )*)* where escape symbol is "|" 
[09:14:06][Step 1/8] '
我用谷歌搜索了几个小时,结果一无所获。
我做错了什么?

我在teamcity-support.jetbrains.com上问了这个问题,得到了一个答案:

问题在于脚本定义中的“-x”。好像要走了 用于跟踪脚本的额外长度,该脚本以脚本结尾 弱点。删除-x将使脚本正常工作。你可以 检查是否在生成结束时设置了参数 在“生成结果”页面的“参数”选项卡上


它可以工作。

bash选项非常有用,解决方案不需要删除该选项。相反,让我们先看看为什么在自定义脚本中会出现问题

使用bash的
-x
选项,bash将回显它将要执行的行,包括文字转义字符。TeamCity将尝试解析此输出(此时我们不希望解析此输出,因为不需要解析命令行echo)。如果TC认为回显的命令行格式不正确(例如,由于转义字符),它将发出
不正确的属性名称。
警告:

echo“##teamcity[buildStatisticValue key=\'warnings\'value=\'42\'”

但是,TC将看到该命令的执行输出良好

如果TC将回送的命令行正确地解析为TC消息,则情况更糟,因为当该行执行时,它将再次解析该命令行,这可能导致重复计数和其他细微错误

相反,如果您必须在自定义脚本中包含
##
,并且启用了
-x
,请确保像这样转义两个哈希:

echo\\\\\\\\\teamcity[buildStatisticValue key=\'warnings\'value=\'42\']

Bash将使用转义的散列打印确切的命令行,TC不会尝试解析它(或者失败或者重复计数),但是当执行该行时,它将作为
##teamcity[buildStatisticValue key='warnings'value='42'
响应,TC将按预期解析哪个命令行