Mik*_*ike 12 c# msbuild nant wpf teamcity
在我们的项目中,部署总是很痛苦,主要是因为发布管理团队所犯的错误.他们搞砸了配置或以某种方式安装了错误的版本.我们使用teamcity作为我们的CI服务器,它生成工件作为zip文件(dll和exe),通常传递给发布团队.我的问题是,有没有办法自动化整个部署过程?
有没有商业工具,支持这个?
我们希望执行以下操作:
使用特定于环境的值更新配置文件.
将Windows服务安装到服务器.
将UI(WPF)包上传到集中位置(由另一个应用程序拉下来,类似于启动器).
更改数据库连接字符串.
针对各种环境(如int,uat和prod)执行以上所有操作
数据库部署因此是一个单独的野兽,因此不需要涉及.
任何最佳实践,工具或解决方案都将非常有用.
谢谢,-Mike
我已经将TeamCity用于一些相当大的项目,并且除了数据库之外,我已经自动化了部署的各个方面.我为每个项目使用的主要步骤是:
有一个构建步骤来构建和发布您的解决方案.这可以通过向MSBuild调用添加以下命令行参数来实现:
/ p:Configuration = [Your Config]; DeployOnBuild = True; PackageAsSingleFile = False
您发布的文件(和转换的配置文件)将写入以下目录:
[您的项目目录]\obj\[您的配置]\Package\PackageTmp
使用脚本语言(在我的案例中为Powershell)将已发布的工件复制到您的部署目录,并进行您提到的特定于环境的更改.例如,提取档案,复制文件,启动/停止网站等.
运行任何自动化测试(例如nUnit,Selenium等......)
我发现最好的策略是有一个.Net post-build事件,它调用相应的PowerShell脚本传递相关的细节,比如解决方案路径和配置名称(或者,我也让TeamCity将环境名称传递给Powershell脚本)所以它知道它需要做什么(例如,分期,生产等......).您应该会发现像Powershell这样的脚本语言可以完成一个人可以做的所有事情(大约快100倍,100%可靠).
Powershell上有很多内容,你可以在Powershell中搜索你需要做的任何事情,你会得到一个例子.例如"powershell部署WPF","powershell上传FTP"等......
在之前的工作中,我需要远程部署Windows服务,我发现通过足够的研究,我能够获得服务的MSI来卸载现有服务并完全安静地安装新服务(即没有对话框).这将有助于您实现自动化.如果你愿意,我可以详细说明.
下面是我通常使用的Powershell post构建脚本的示例:
请注意我如何使用一些默认参数值,以便我可以直接从我的Powershell编辑器执行脚本,以模拟和测试本地计算机上的不同配置.
param(
[string]$configurationName="Debug",
[string]$sourceDirectory="C:\SVN\<Your local solution location>")
Set-StrictMode -v latest
$ErrorActionPreference = "Stop"
# Load required functions
$private:scriptFolder = & { (Split-Path $MyInvocation.ScriptName -Parent) }
. (Join-Path $scriptFolder DebugBuild.ps1)
. (Join-Path $scriptFolder StagingBuild.ps1)
. (Join-Path $scriptFolder ProductionBuild.ps1)
. (Join-Path $scriptFolder CommonBuildFunctions.ps1)
#Execute appropriate build
switch ($configurationName) {
"Debug" { RunDebugBuild $sourceDirectory }
"Staging" { RunStagingBuild $sourceDirectory }
"Production" { RunReleaseBuild $sourceDirectory }
}
Run Code Online (Sandbox Code Playgroud)
为了在开发机器上执行发布,我为提交给SVN的解决方案设置了VS发布配置文件,以便其他开发人员可以使用它.此配置文件直接发布到本地部署目录.