例如,如果我需要替换一些字符串
%teamcity.agent.work.dir%\\nd_r\\bin\\isf
。但是,如果变量teamcity.agent.work.dir
为C:\BuildAgent\work\
,则会删除所有反斜杠并将文本替换为C:BuildAgentwork\nd_r\bin\isf
。
如果我最初不知道它的价值,我怎样才能逃脱变量中的所有反斜杠?
\ Q%env.NDRIVE%\ E \ nd_r \ bin \ isf - 它不起作用。
答案 0 :(得分:3)
TeamCity不支持在%-references中额外处理值,它只能“按原样”使用。
在您的情况下,可能的解决方法是:
答案 1 :(得分:1)
由于 TeamCity 2017.1 ,文件内容替换可以在固定字符串模式下运行(类似于grep -F
),而不是原始的正则表达式模式:
如果您使用versioned settings( XML 或 Kotlin DSL 变体),还有另一种模式可供您使用(除了REGEX
和FIXED_STRINGS
):REGEX_MIXED
。在此模式下,搜索模式仍将被解释为正则表达式,但替换文本将为quoted,因此\
和$
字符将不再具有任何特殊含义。< / p>
如果您将设置导出到 Kotlin ,示例文件内容替换配置可能如下所示:
features {
replaceContent {
fileRules = "**/*"
pattern = "(?iu)the\h+pattern\h+to\h+search\h+for"
regexMode = FileContentReplacer.RegexMode.REGEX_MIXED
replacement = """%teamcity.agent.work.dir%\nd_r\bin\isf"""
}
}
答案 2 :(得分:0)
还有另一种解决方案,但这有点像黑客攻击。只需使用两个独立的文件内容替换器分两个阶段进行替换。
这种方法唯一的小问题是teamcity不允许重新排序构建功能,这表明可能无法保证执行顺序。但到目前为止它对我有用。