我有一个CI服务器(Bamboo,但我不认为这很重要)构建和自动部署我的应用程序。在本地开发期间,我使用localdb(<connectionStrings>
中的web.config
节点)
<add name="MyApp" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDB)\v11.0;Integrated Security=True;Connect Timeout=30;Initial Catalog=MyApp" />
<add name="MyApp_Patients" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDB)\v11.0;Integrated Security=True;Connect Timeout=30;Initial Catalog=AppleHms_MyApp" />
...
部署时显然不应该使用它。它应该使用我的部署sql server连接字符串。
我知道我可以为此编写一个web.config转换,我甚至知道我可以加密web.config,但我不确定db连接字符串应该如何正确地进入。对我来说有意义的是CI服务器覆盖每个connectionString - 所以我的配置转换应该看起来像这样
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<connectionStrings>
<add name="MyApp" providerName="System.Data.SqlClient" connectionString="${main-db-connectionstring}" xdt:Transform="SetAttributes" xdt:Locator="Match(name)" />
<add name="MyApp_Patients" providerName="System.Data.SqlClient" connectionString="${patients-db-connectionstring}" xdt:Transform="SetAttributes" xdt:Locator="Match(name)" />
...
</connectionStrings>
<system.web>
<compilation xdt:Transform="RemoveAttributes(debug)" />
</system.web>
</configuration>
覆盖来自我的ci服务器中的变量(可能是msbuild或部署的某些部分)?
这是正确的,这是&#34;对&#34;这样做的方式?我究竟要与msbuild / deploy做些什么来实现这一目标?
答案 0 :(得分:6)
我们也使用竹子进行CI和部署,我们正在做的是:
基本上与msdeploy相关的部署如下:
msdeploy
-verb:sync
-source:package="NightlyPackage.zip"
-dest:iisApp="YourIISHost/YourIISSite"
-declareParamFile="YourEnvironementSetParameters.xml"
每个项目包的Parameters.xml如下所示:
<parameters>
<parameter
name="ConnectionString1-Web.config Connection String"
description=""
defaultValue="localhost">
<parameterEntry
kind="XmlFile"
scope="\\web.config$"
match="/configuration/connectionStrings/add[@name='ConnectionString1']/@connectionString"
/>
</parameter>
</parameters>
其中ConnectionString1
是connectionString的名称。
您的YourEnvironementSetParameters.xml如下所示:
<parameters>
<setParameter name="ConnectionString1-Web.config Connection String" value="Your parametrized connection string value " />
</parameters>
使用webdeploy在某些字段上使用参数化时存在约定。关注连接字符串,因此在引用web.config连接字符串时,最好遵守以下参数命名:
%NameOfYourConnectionStringAsInWebConfig%-Web.config Connection String
答案 1 :(得分:2)
使用XMLPoke任务将是通过MSBuild脚本
执行此操作的正确方法另外,为了获得非常好的参考,请查看Sayed Ibrahim Hashimi blog,始终提供帮助