我们正在开始一个新的WinForms项目,并决定使用TeamCity来创建构建并运行单元和集成测试。该项目涉及数据库。我们有3个数据库(developDB(这是开发人员在开发时使用的)),testDB(teamcity用来运行测试)和productionDB(客户端使用它))。 TeamCity有3个buildConfiguration。提交发生时会触发第一个。第二个是每晚触发运行集成测试。第三个是由开发人员在我们发布什么时触发的。所以我希望TeamCity能够根据发生的构建类型来更改connectionString。另外我不想在app.config中存储connectionString(我不希望客户端知道用户和密码)。有哪些选项可用于执行任务?
提前谢谢!
的更新
如果重要的话,我使用NHibernate和FluentNHibernate来连接数据库。
答案 0 :(得分:0)
我没有使用过TeamCity,但我在登录过程中(即在运行时)编写了多个动态更改ConnectionStrings的应用程序,而且非常简单。
您没有告诉我们如何连接到您的数据库。既然你提到app.config,我想它是ADO.NET DataSets或simmilar技术,它在你的Settings.Designer.cs / app.config中创建一个只读(getter)ConnectionString。
我做的是在Settings.cs(而不是Settings.Designer.cs)中为ConnectionString属性创建一个setter方法,如下所示:
public void setNorthwindConnectionString(String value) {
this["NorthwindConnectionString"] = value;
}
我生成的DataSet然后使用此NorthwindConnectionString访问数据。
您可以使用预处理程序指令进行ConnectionString的条件设置:
#if DEBUG
Console.WriteLine("Mode=Debug");
Settings.Default.setNorthwindConnectionString("(DebugDBConnectionString)");
#else
Console.WriteLine("Mode=Release");
Settings.Default.setNorthwindConnectionString("(ReleaseDBConnectionString)");
#endif
您还可以encrypt your connection strings,并在发布后事件期间复制正确的app.config。
答案 1 :(得分:0)
在这种情况下,我会使用TeamCity运行一个nant脚本来执行构建。
NAnt允许您在构建时修改配置文件值(例如连接字符串)。
可以在此博客文章中找到使用TeamCity / NAnt部署到不同登台环境的示例: http://thecodedecanter.wordpress.com/2010/03/25/one-click-website-deployment-using-teamcity-nant-git-and-powershell/
正如@surfen建议的那样,每个环境的连接字符串值都应加密,以防止凭据以纯文本格式存储。
答案 2 :(得分:-2)
我假设你将使用msbuild在Team city中构建你的项目。如果是这种情况,那么您可以发送条件编译符号,您可以在其中传递您需要的符号。
一旦你有了symols,你可以做以下事情:
#if DEVBUILD
//.... Your Connection String Code here
#endif
#if INTBUILD
.... Your Connection String Code here
#endif
这是你第一个问题的答案。
查看问题的第二部分,在哪里,您不想存储用户名& app.config中的密码,
选项: