从jenkins开始的Tcl脚本将命令转换为小写

时间:2017-09-18 14:24:33

标签: docker jenkins tcl

在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

注意:在第一次迭代中,所有内容都正确发送。

任何人都知道为什么会这样?

谢谢!

1 个答案:

答案 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 "$"
}