TeamCity的。命令行构建步骤。 setParameter始终显示"不正确的属性名称"错误

时间:2017-06-12 09:31:30

标签: 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][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] '

我一直在尝试谷歌几个小时而一无所获。 我做错了什么?

2 个答案:

答案 0 :(得分:4)

我已经在teamcity-support.jetbrains.com上询问并得到了答案:

  

问题在于" -x"从脚本定义。好像走了   跟踪脚本的额外长度,以脚本结尾   失败。删除-x将使脚本正常工作。您可以   通过检查验证参数是否在构建结束时设置   在构建结果页面上,参数选项卡。

有效。

答案 1 :(得分:2)

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

使用bash的-x选项,bash将回显它即将执行的行,包括文字转义字符。 TeamCity将尝试解析此输出(此时我们不想要,因为命令行回显不是要解析的)。如果TC将回显的命令行视为格式错误(例如,由于转义字符),它将发出Incorrect property name.警告:

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

但是,TC会将该命令的执行输出视为正常。

如果TC正确地将回显的命令行解析为TC消息,那就更糟了,因为它会在该行执行时再次解析 ,这可能导致重复计算和其他细微错误。 / p>

相反,如果您的自定义脚本中必须有##并且-x已启用,请确保将两个哈希值转义为:

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

Bash将使用转义的哈希打印确切的命令行,TC不会尝试解析它(并且失败或重复计数),但是当执行该行时,它将回显为##teamcity[buildStatisticValue key='warnings' value='42' TC将按预期进行解析。