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

Sha*_*der 3 jetbrains-ide teamcity-8.0 teamcity-9.0

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

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

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

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

用...来代替 <script src="bundle.js?time=getTime()"></script>

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

Evo*_*Ltd 9

请尝试以下方法

添加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
Run Code Online (Sandbox Code Playgroud)

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

![在此处输入图像说明

不确定您的文件路径是什么或者您希望标题调用的是什么,但您应该能够根据您的要求进行更改.

希望这可以帮助

修订

要捕获任何异常,请尝试将代码包装在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
}
Run Code Online (Sandbox Code Playgroud)

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

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
}
Run Code Online (Sandbox Code Playgroud)