2011-04-28 75 views
2


我们正在开始一个新的WinForms项目,并决定使用TeamCity来创建构建和运行单元和集成测试。该项目涉及数据库。我们有3个数据库(developDB(开发人员在开发=时使用),testDB(由teamcity用于运行测试)和productionDB(由客户使用))。 TeamCity有3个buildConfiguration。第一个是在提交时触发的。第二个是每天晚上触发集成测试。第三个是由开发人员在我们发布什么时触发的。所以我希望TeamCity能够根据发生什么样的构建来更改connectionString。另外我不想在app.config中存储connectionString(我不希望客户端知道用户和密码)。哪些选项可用于执行该任务?
在此先感谢!
更新
我使用NHibernate和FluentNHibernate连接数据库,如果它很重要。Winforms ConnectionString和TeamCity

回答

0

在这种情况下,我会使用TeamCity运行一个脚本来执行构建。

NAnt允许您在构建时修改配置文件值(例如您的连接字符串)。

使用的TeamCity /恶性部署到不同的执行环境的一个例子可在这个博客帖子中找到: http://thecodedecanter.wordpress.com/2010/03/25/one-click-website-deployment-using-teamcity-nant-git-and-powershell/

作为@surfen所暗示的,为每个环境的连接字符串值应该被加密,以防止从凭证以纯文本形式存储。

+0

Downvoter - 请添加评论,以解释为什么您投下了接受的答案? – DaveRead 2014-03-14 12:03:42

0

我还没有使用过TeamCity,但是我在登录过程中(即在运行时)使用动态改变的ConnectionStrings编写了多个应用程序,而且它非常简单。

你没有告诉你如何连接到你的数据库。既然你提到了app.config,我想这是ADO.NET数据集或类似技术,它会在你的Settings.Designer.cs/app.config中创建一个只读(getter)ConnectionString。

我所做的,是为ConnectionString属性像这样创造Settings.cs(未Settings.Designer.cs)setter方法:

public void setNorthwindConnectionString(String value) { 
    this["NorthwindConnectionString"] = value; 
} 

我产生的数据集,然后使用该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。

-2

我假设您将使用msbuild在Team city中构建您的项目。如果是这样的话,那么你可以发送条件编辑符号,在那里你可以传递你需要的任何符号。

一旦你的symols,你可以做这样的事情:

#if DEVBUILD 
//.... Your Connection String Code here 
#endif 

#if INTBUILD 
.... Your Connection String Code here 
#endif 

这回答了你的问题FRST。

看着你的问题,你在那里不希望&密码存储的用户名在App.config的第二部分,

选项:

  • 尝试intergrated的安全性,它会使用您的域名账户
  • 如果选项无法使用,请尝试将您的连接字符串保留为注册表项,以便其不明显或环境变量。