团队合作精神。命令行构建步骤。setParameter始终显示“属性名称错误”错误

ttm*_*ask 3 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']"
Run Code Online (Sandbox Code Playgroud)

构建日志:

[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] '
Run Code Online (Sandbox Code Playgroud)

我一直在尝试搜索它几个小时,却一无所获。我究竟做错了什么?

Mar*_*ver 6

-xbash的选项是非常有用和解决方案不需要涉及移除选项。相反,让我们看看为什么在自定义脚本中首先会出现问题。

使用 bash 的-x选项,bash 将回显它即将执行的行,包括文字转义字符。TeamCity 将尝试解析此输出(此时我们不希望这样做,因为不打算解析命令行回显)。如果 TC 发现回显的命令行格式不正确(例如,由于转义字符),它将发出Incorrect property name.警告:

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 将按预期解析。


ttm*_*ask 5

我在teamcity-support.jetbrains.com上提出了要求,并得到了答案:

问题出在脚本定义中的“ -x”。跟踪脚本似乎要花费额外的时间,最终以脚本失败结束。删除-x将使脚本正常工作。您可以通过在构建结果页面的“参数”选项卡上进行检查,来验证是否在构建结束时设置了参数。

有用。