【问题标题】:Using the percent sign in TeamCity build scripts在 TeamCity 构建脚本中使用百分号
【发布时间】:2011-05-22 08:32:12
【问题描述】:

我正在尝试设置运行自定义命令行脚本的 TeamCity 构建过程。该脚本使用一个变量,因此它需要一个百分号(例如%x)。但是 TeamCity 对其属性使用百分号(例如 %build.number%),因此脚本中的百分号在运行时会被删除。

如果脚本包含以下内容:

for /d %x in ("c:\*") do @echo "%x"

这是它实际运行的:

for /d x in ("\*") do @echo "x"

如何编写脚本以便包含变量?

【问题讨论】:

  • TeamCity 不会触及它在代理机器上运行的文件;你确定是 TC 搞砸了百分比吗?
  • 我试图使用自定义脚本而不是单独的文件。将其移动到文件中有所帮助。

标签: teamcity


【解决方案1】:

尝试for /d %%x in ("c:\*") do @echo "%%x"(即复制 % 符号)。

但是应该有一种方法可以告诉 TC 保留该文件。如果 TC 会删除源中的百分号,那将是可怕的。因此,我很确定您在配置中做了一些事情来启用 % 的替换。

在类似的注释中,真的是 TC 与脚本混淆了吗?或者您是否使用构建工具来生成脚本或类似的东西?

【讨论】:

  • 我最初尝试使用自定义脚本而不是单独的文件,并且我尝试了重复的百分号,但它不起作用。不过,在单独的文件中使用它们是可行的。
  • 另外,通过将百分号增加三倍,我可以让它作为自定义脚本工作。
  • 你的脚本被破坏一定是有原因的。哪个程序扩展%build.number%?真的是TC吗?如果是这样,那么必须有一个选项来关闭它。如果您需要内部版本号,我建议将其放入不同的脚本中并阅读它将call
  • 天啊!我花了一整天的时间试图弄清楚。非常感谢!
【解决方案2】:

似乎 TeamCity 只是将您输入的内容粘贴到 a .cmd 文件中 在这些情况下,for 语句需要双倍百分比。 然后似乎 TeamCity 删除了其中一个 % 标志,因此 tspauld 让它工作(这也是我让它运行的方式)。

在日志中,TeamCity 似乎在这里创建了一个文件Program Files\TeamCity\buildAgent\temp\agentTmp,但是 for cmd 执行并过早地死掉,看不到它写了什么,大概如果第一行是一个长时间执行的任务,你可以检查这个(令人讨厌的“暂停”不起作用)。

【讨论】:

    【解决方案3】:

    如果您想将 % 传递给 TeamCity,您应该使用另一个 % 转义它,即 % it must be %%`。

    但 Windows 命令行将% 视为转义字符,因此您应该再次转义它,在每个% 之前添加另一个%,即对于%%,您应该传递%%%%

    流程是:

    %%%% in cmd -> %% in TeamCity -> % actual sign.
    

    tl;dr:您的问题的答案是:

    for /d %%%%x in ("c:\*") do @echo "%%%%x"
    

    【讨论】:

    • 嗨 Marat,您的回答帮助我在命令行构建步骤中转义了 %。但我仍然不明白为什么我需要通过 4% 标志,而 %% 应该逃避标志?你有任何文件的链接来解释这个吗?
    • @Newbee 有2层转义。第一个是 TeamCity,第二个是命令行。因此,如果您将 %%%% 传递给 TeamCity,它会将其解释为 %% 并将其传递给命令行。然后命令行获取 %% 并将其解释为 %。
    猜你喜欢
    • 2012-06-27
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    • 2018-08-21
    相关资源
    最近更新 更多