TeamCity 10.0.4 更新 application.config 文件中的密码

TeamCity 10.0.4 update password in application.config file

我们使用 TeamCity 作为构建服务器,git 用于源代码管理。当我们构建发布包时,我想在 TeamCity 中为 imapClientConfiguration 更新 password,而不必手动进行。冒险在 Git 中使用生产密码似乎不是一个好主意,但 TeamCity 受到更多限制,将其作为密码参数是可以的。

我现在的问题是如何从 Team City 参数中获取值并将其转换到我的 application.config 文件中?转换其他值我使用 SlowCheetah。

我的理解是您应该将它作为参数添加到 System Properties 下,然后在构建过程中以某种方式获取它。目前我们使用 Visual Studio runner.

application.config

<applicationConfiguration
  apiUrl="http://localhost:13297/">
<imapClientConfiguration
  userName="test"
  password=""
  host="MAILSERVER-TEST"
  port="993"
  useSsl="true" />
</applicationConfiguration>

application.Release.config

<applicationConfiguration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"
    apiUrl="http://localhost:90/"
    xdt:Transform="SetAttributes(apiUrl)">

     <imapClientConfiguration
    userName="production"
    password="REPLACE"
    host="mail.domain.com"
    port="993"
    useSsl="true"
    xdt:Transform="Replace"/>
</applicationConfiguration>

最终得到以下解决方案:

在 Git 中添加您不想要的密码和其他信息,例如作为配置参数的许可证密钥。

现在向 git 添加一个新文件,我添加了一个名为 PasswordChange.ps1.

的文件

在实际构建之前添加一个新的构建步骤,并且 select PowerShell 作为运行器类型。 运行 文件中的脚本并设置脚本文件以匹配新创建文件的路径。添加这样的脚本参数 -imapPassword %imapPassword%

application.Release.config 中将 password 的值设置为 __imap_password_placeholder__ 或类似的值。

然后使用以下信息更新您的脚本:

param([string]$imapPassword, [string]$wordLicenseKey, [string]$excelLicenseKey)

$incomingMailServicePath = "Solution\Project\application.Release.config"
echo "Trying to change imap password for $incomingMailServicePath"
(Get-Content $incomingMailServicePath) |
 Foreach { $_ -Replace "__imap_password_placeholder__", $imapPassword } |
   Set-Content $incomingMailServicePath;
echo "Imap password changed"
...

全部完成。