2017-01-22 22 views
1

TFS 2015年,vNext建立过程(不XAML)上部署不发布SQL连接字符串时,它已经存在使用变换

我想对于一个MVC的Web应用程序自动部署过程。它将部署的服务器具有不同的SQL连接字符串。因此,我目前的部署是手动将web.config文件复制到web.config.save,使用WebDeploy部署新版本,然后转到旧的web.config.save文件并复制连接字符串。我现在的规模已经远远不能持续太久。所以我需要进一步自动化这个过程。我有TFS自动构建和部署到我的测试服务器(它也有不同的连接字符串,所以这是一个很好的测试)。在“发布”属性中,我尝试在发布设置数据库部分取消选中“在运行时使用此连接字符串(更新目标web.config)”复选框,然后再次将项目签入到TFS。但是在部署时,web.config采用默认设置。我不想删除这个设置,因为我想要一个默认连接字符串用于新安装。

我可以编写一个xml传输程序来保存当前连接字符串,然后在重新完成时覆盖。但是我认为必须有一种方法来使用当前的工具集来做到这一点,并且为什么要重新发明轮子?

我开始使用转换的路径。所以,我在VS2015中创建一个web.config.release加入这个到web.config.release文件:

<connectionStrings> 
    <add xdt:Transform="InsertIfMissing" xdt:Locator="Match(name)" name="AppEntities"  connectionString="metadata=res://*/Models.DBName.csdl|res://*/Models.DBName.ssdl|res://*/Models.DBName.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\SQLExpress;initial catalog=DBName;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
</connectionStrings> 

因此,没有人知道我可以做的SQL连接字符串更新仅当它不”是否存在于当前的web.config中进行部署?

+1

几个信息将有助于回答你的问题:你是什么意思与'复制'? web.config.save文件来自哪里?你使用的是哪个版本的TFS?您是否正在使用XFSL构建版或VFS构建版的TFS2015 +和VSTS? –

+0

谢谢,更新了任务以澄清您的意见。 – DaBlue

+0

一位员工告诉我有关转换的信息,然后我发现这篇文章的主题,它似乎在我最初的测试中工作。 http://www.tomot.de/en-us/article/5/asp.net/how-to-use-web.config-transforms-to-replace-appsettings-and-connectionstrings – DaBlue

回答

1

我在2016年第二季度获得了TFS 2015 vNext build 的经验,我们分配了Dev Ops人员,他非常擅长PowerShell,并且负责构建和部署流程。他想出的一些东西是后期构建脚本。

现在回答您的问题:对于我们来说,构建后脚本将执行部署部分,并且作为部署的一部分,您将更新web.config中的连接字符串。现在,这需要您团队中的某个人用PowerShell变得非常好。

现在我要做的是在原始文件中编写一个特殊的文字,例如“{ConStringHere}”,并用Powershell脚本代替它,这样你只能替换一次。

怎么看这个验证一个文件所包含的单词,并使用PowerShell的替换: Powershell, using contains to check if files contain a certain word

我会介绍一些我们使用这种方法遇到的好处:

  • 你不不需要解决方案,项目和类来修改一些文件。大多数后生成文件的修改可以使用line或2在powershell中完成。
  • 您可以将TFS中的powershell脚本保留在TFS中,以保留历史和更改的注释。
  • 您可以将特殊值(连接字符串,用户,密码)定义为构建变量,这些构建变量比项目中的硬编码值更易于更改并具有更高的安全性。
  • 每个环境可以有多个脚本。理想情况下,每个环境中的所有脚本应该几乎相同,但是在生产环境中,您可能会发布到2个不同的服务器,因此您需要拨打两次。
  • 您将节省开发人员的时间,因为维护PowerShell的人员不必是一个完整的堆栈开发人员。
+0

它看起来像转换是仅在编译期间。我没有做一个PowerShell脚本,我可以在几分钟内用C#写这个,所以这就是我最终做的。 – DaBlue

相关问题