我工作场所的所有部署都是手动的。我一直在寻找使用MSBUILD和MSWebDeploy实现所有这些自动化的方法。我设法做到的如下:
- 构建/编译解决方案
- 运行数据库迁移
- 使用ms-webdeploy直接部署到网站
全部来自一个MSBUILD脚本。
这与手动过程略有不同,因为当手动部署新版本的网站时,它会被放入一个带有日期时间戳的新文件夹中。然后IIS指向新文件夹。
我的问题是,我将如何完成最后两个动作?即,写入比当前网站指向的文件夹更高级别的特定文件夹,然后重新指向新文件夹IIS。
Web Deploy不直接支持此功能。值得庆幸的是,它确实提供了runCommand提供程序,这就是您最终要使用的。
%windir%\system32\inetsrv\appcmd.exe是用于交换站点目录的实用程序。这里有一个用法示例:如何使用APPCMD更改IIS7中网站的物理路径?
-
创建一个调用appcmd的脚本。此脚本将始终位于目标服务器上。您可以决定将其作为站点部署的一部分,也可以将其从旧目录移到新目录中。目标计算机上的"web部署用户"需要具有适当的凭据和访问权限才能创建目录。
-
在MSBUILD脚本中,在部署之前,请在目标服务器上调用该脚本。例如
msdeploy.exe-verb:sync-source:runcommand="C:\path\to\wwwroot\bin\script.bat"-目标:自动,wmsvc=https://contoso.com:8172/msdeploy.axd,username=%username%,password=%password%
-
然后像往常一样部署
注意:尽量避免这种完全部署的方式。如果您希望快照您的站点,请考虑部署到一个包(zip),然后将该包部署到您的目标服务器。回滚应该通过部署较旧的包来处理,而不是通过重新初始化到较旧的目录。