在jenkins中运行tcl命令时,我遇到了一个奇怪的问题。
tcl脚本有以下几行(注意Id中的大写字母):
foreach name $docker_names {
set name "TestName"
puts $name
set command "docker inspect --format='{{.Id}}' ${name} > /home/temp/id.txt"
send -- "$command\n"
expect "$"
}
在jeknins日志中,我看到作业失败,因为在循环的第二次迭代中发送的内容是上面的命令但是小写。我需要 I in Id 为大写。
这是在循环的第二次迭代:
中发送的内容docker inspect --format='{{.id}}' testname > /home/temp/id.txt
注意:在第一次迭代中,所有内容都正确发送。
任何人都知道为什么会这样?
谢谢!
答案 0 :(得分:0)
从纯TCL的角度来看,这是不可能发生的。这是Jenkins中TCL解释器集成的副作用:我猜有一个隐藏层可以解析脚本并根据非TCL语法对其进行修改。 我会做2次试验: 首先是最小化字符串的TCL解析:
UPDATE users User
INNER JOIN
blacklist_users BlacklistUser
ON
(
User.username = BlacklistUser.account_ref
OR
User.email = BlacklistedUser.account_ref
OR
User.phone_number = BlacklistUser.account_ref
AND
User.is_active = 1
AND
BlacklistUser.has_run = 0
)
SET
User.is_active = 0,
BlacklistUser.has_run = 1;
如果没有帮助,请尝试反击可能由另一层解释的花括号:
foreach name $docker_names {
set name "TestName"
puts $name
set command [concat {docker inspect --format='{{.Id}}'} $name { > /home/temp/id.txt} "\n"]
send -- $command
expect "$"
}