使用 team city 插入内部版本号并执行字符串替换操作

using team city to insert build number & perform string replacement operations

我在 Windows 2012 服务器上使用 team city 9.1.7 版本。作为构建步骤的一部分,我使用命令行构建了一个基于 nodejs 的应用程序。输出是一堆 Javascript 和 html 文件。

下一步(构建结束并生成输出后),我要执行以下操作:

  1. 从团队城市获取当前内部版本号并将其插入 index.html(在输出文件夹中可用)文件。我想添加一个可以告诉我构建版本的元标记。
    1. 在同一个文件(index.html)中,我想执行字符串查找和替换操作。我想给文件添加时间戳。

找到这个 <script src="bundle.js"></script>

替换为 <script src="bundle.js?time=getTime()"></script>

将导致 <script src="bundle.js?time=4324324324"></script>

尝试以下方法

添加一个 PowerShell 步骤和运行以下作为源代码

$versionNumber = "%build.number%"
$filePath = "%teamcity.agent.work.dir%\path\file.txt"

(GC $filePath).Replace("<head>", "<head><meta http-equiv='X-Version-Number' content='$versionNumber'>").Replace("bundle.js", "bundle.js?time=getTime()") | Set-Content $filePath

这将读取文件内容并对其执行两次替换,然后写回文件。

不确定您的文件路径是什么或您希望 header 调用什么,但您应该能够更改它以满足您的要求。

希望对您有所帮助

修订

要捕获任何异常,请尝试将代码包装在 try catch 块中

try {
    (GC $filePath).Replace("<head>", "<head><meta http-equiv='X-Version-Number' content='$versionNumber'>").Replace("bundle.js", "bundle.js?time=getTime()") | Set-Content $filePath
}

catch [System.Exception] {
    Write-Output $_
    Exit 1
}

要打破缓存,您可以使用版本号,因为这会增加每个构建,因此是唯一的

try {
    (GC $filePath).Replace("<head>", "<head><meta http-equiv='X-Version-Number' content='$versionNumber'>").Replace("bundle.js", "bundle.js?v=$versionNumber") | Set-Content $filePath
}

catch [System.Exception] {
    Write-Output $_
    Exit 1
}