我尝试使用命令行构建步骤填充一些参数。
以下是代码:
#!/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] '
我一直在尝试谷歌几个小时而一无所获。 我做错了什么?
答案 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将按预期进行解析。