繁体   English   中英

使用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(在输出文件夹中可用)文件中。 我想添加一个meta标签,它可以告诉我构建版本。
    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

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

![在此处输入图像说明

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

希望这可以帮助

修订

要捕获任何异常,请尝试将代码包装在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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM