0

在提升或部署构建时,我想自动交换单个数据库连接文件。这可以作为构建后步骤或作为部署前的预包装步骤完成。作为构建后步骤交换测试数据库连接代码

被换出的文件是一个测试文件;正在交换的文件应该具有真正的数据库连接配置。

这怎么办?我使用Hudson作为CI服务器,如果有帮助的话,可以使用GitHub for SCM。

手动交换文件,恕我直言,是充满人为错误,可以完全忘记。此外,它还增加了一件事情,并阻碍了持续部署周期的势头。

回答

0

也许你不需要替换整个文件。作为部署脚本的一部分,我们使用powershell来读取配置文件,并根据我们部署的位置使用一些xpath magic来查找和更改数据库连接字符串以进行测试/生产设置。

其有效地搜索和替换。

以下是修改.NET Web配置文件的代码片段,但对于其他基于xml的配置文件也可以做同样的事情。

$Config = (Get-Content -Path <Path to web.config>) -as [xml] 
@(
    @{ 
     xpath = '/configuration/appSettings/add[@key="Setting1"]' 
     edit = { $_.value = <Setting1 value> } 
    }, 
    @{ 
     xpath = '/configuration/connectionStrings/add[starts-with(@name, "ConnString")]' 
     edit = { $_.connectionString = "Data Source=<servername>;Initial Catalog=NorthWind;Integrated Security=SSPI" } 
    } 
) | 
    ForEach-Object { 
     $Config.SelectNodes($_.xpath) | 
      ForEach-Object -Process $_.edit 
    } 
$Config.Save(<path to web.config>) 
+0

太棒了!你介意分享多一点(有点迷你方法)?我有点小菜,并会深深地感激它。 – 2010-09-15 05:17:54

+0

这是一小段代码。我对哈德森不太熟悉,所以我不确定这会从哪里执行。 – Darren 2010-09-16 07:17:41

0

的Windows

因为我没有PowerShell中:我实现了一个搜索和替换基于this blog post。请注意这种方法的一些局限性。

的Linux/Unix

了解如何使用SED(man pages)。如果你有cygwin,你也可以使用sed。