我正在尝试将同一存储库中的两个应用程序构建并部署到Windows VM。
我希望将所有Web应用程序部署到与站点名称匹配的虚拟应用程序中。
我的构建步骤只是一个标准的裸手vsbuild:
variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
... standard stuff ...
- task: VSBuild@1
inputs:
msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactStagingDirectory)\WebApp.zip"'
solution: '$(solution)'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
这将生成一个名为webapp.zip的zip文件。查看zip文件,它具有以下结构
D_C
-> a
-> 1
-> s
-> app1
-> release
-> netcoreapp2.1
-> PubTmp
-> Out
-> <expected content>
-> app2
-> release
-> netcoreapp2.1
-> PubTmp
-> Out
-> <expected content>
子问题-为什么我得到obj文件夹而不是bin文件夹?
我的发布再次只是一个带有“ iis Web应用程序部署”任务的任务。现在,我只是将其保留为默认网站。
将部署任务保留为默认设置,没有子文件夹或虚拟应用程序,它将app1转储到网站主机文件夹的根目录中
我尝试定义两个发布任务,将app1和app2都指定为虚拟应用程序,尽管从表面上看它似乎可以工作(我得到一个名为app1的文件夹和一个名为app2的文件夹),但两个文件夹都包含app1的代码
尽管它显然是指TFS而不是devop,但https://devblogs.microsoft.com/devops/deploying-an-azure-web-site-using-the-new-build-system-in-visual-studio-online/完美地描述了我正在尝试执行的操作,但似乎没有用。
答案 0 :(得分:1)
发布管道可从单个zip文件部署多个网站
根据我的测试,IIS web app deploy
任务会将文件部署在Out
文件夹下。
Vsbuild会生成一个zip文件夹,我们无法在zip文件夹中对这两个应用进行分类和部署。
由于您的网站位于同一个zip文件中,因此您可以添加Extract files
任务以提取该zip文件。
然后,您可以直接使用解压缩的文件夹(app1-> Out和app2-> Out)进行部署。
这里是一个例子:
在IIS部署任务中,您可以将输出文件夹设置为Package or Folder
。
例如:
您需要直接对相应的文件夹路径进行硬编码。
例如
$(System.ArtifactsDirectory)\Destination folder name\Content\C_C\xxxxx\s\MvcMovie\MvcMovie\obj\Release\netcoreapp2.2\PubTmp\out
另一方面,您可以更改VSBuild参数。
/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=false /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactstagingdirectory)" /p:DeployIisAppPath="Default Web Site"
然后它将为相应的应用生成两个zip文件。
在这种情况下,它可以使您的部署过程更加清晰。