从 VSTS 发布管理将网站构建部署到 Azure
Posted
技术标签:
【中文标题】从 VSTS 发布管理将网站构建部署到 Azure【英文标题】:Deploying WebSite builds to Azure from VSTS Release Management 【发布时间】:2015-12-03 00:38:57 【问题描述】:我正在为 Visual Studio Team Services 新的发布管理系统的预览而努力。我的场景是一个经典网站(ASP.NET 4.5),它在 VSTS 中托管了一个 Git 存储库。构建定义成功,如下所示:
它被设置为发布为可由 Release Manager 拾取的工件,如下所示:
在发布管理器方面,我已正确链接该工件,如下所示:
在这里你可以看到我的环境以及相关的任务(所有 3 个都是克隆)
当我运行版本时,构建发布正常,它连接到我的订阅,但是当它尝试查找包文件时,输出日志的第 101 行出现以下错误:
“没有找到使用搜索模式'C:\a\4fe43dd1a***.zip'部署的文件”
这是完整的输出:
这是我卡住的地方,因为我认为通过 VSTS 的工件链接应该为我解决此路径。显然我在某处遗漏了一个重要的难题,但我已尽我所能遵循可用的文档。
如果有人有解决方案或可以指出正确的方向,将不胜感激!
--- 编辑---
我使用文件选择器选择了一个 Web 部署包(见下文)。我尝试使用根网站以及 bin 文件夹。两次尝试都会导致错误提示:“没有找到使用搜索模式 'C:\a\4fe43dd1a\Classic Website Definition\drop\ClassicWebsite\bin' 部署的文件”
--- 编辑 2 ---
我使用以下 MSBuildArguments 向我的 BUILD 进程添加了一个 MSBuild 任务
/p:OutDir=$(build.stagingDirectory) /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true
在我的复制/发布工件任务中,我将输出限制为仅复制 .zip 文件。现在在我的 RELEASE 过程中,当我导航到“Web Deploy Package”时,“drop”文件夹是空的。截图如下:
我认为我走在正确的道路上,我只需要帮助来调整我的 BUILD 任务以生成正确的工件供我的 RELEASE 过程使用。任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:部署包不会复制到工件文件夹。这就是发布管理找不到包的原因。将“复制和发布构建工件”设置为以下应该可以解决您的问题:
【讨论】:
我相信 Publish Build Artifacts 任务的问题已于 2016 年 1 月 5 日得到解决。 @JoshuaDrake 谢谢!,有没有关于他们修复的链接/文章? @password 不,我只是注意到在相关更改期间任务布局发生了变化。具体来说,它不再保留已弃用任务中的一些选项。 我遇到了同样的问题,除了现在没有内容窗格之外,发布构建工件的设置如上所述。它仍然无法在出现错误的情况下发布。 @JamesHancock “内容”窗格不适用于“发布构建工件”任务。您需要添加“复制和发布构建工件”步骤。【参考方案2】:将$(System.DefaultWorkingDirectory)
更改为$(Agent.ReleaseDirectory)
。工件将放在该文件夹中。我不确切知道$(System.DefaultWorkingDirectory)
映射到什么,但我的印象是它在代理用于发布的文件夹之外。
还要确保发布的工件包含预期的 zip 文件——如果没有创建部署包,或者如果您没有发布包含该包的输出文件夹,显然您将无法稍后发布。
当您构建 Web 应用程序时,请确保使用将其打包的 MSBuild 参数对其进行打包以进行部署。像这样的东西应该可以工作:
/p:OutDir=$(build.stagingDirectory) /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true
【讨论】:
谢谢丹尼尔。我进行了更改,并且在这两种情况下,路径都解析为:“C:\a\4fe43dd1a\” - 然后我使用了该文本框旁边的文件选择器,并且能够在创建的“drop”文件夹中导航我的项目通过我的构建过程。我想我只需要指出正确的路径,但我不确定是哪个。我尝试将其指向“$(System.DefaultWorkingDirectory)\Classic Website Definition\drop\ClassicWebsite”以及“$(System.DefaultWorkingDirectory)\Classic Website Definition\drop\ClassicWebsite\bin”,但在这两种情况下我都得到“No找到要部署的文件”,但项目文件在那里......bin
文件夹实际上是否包含您要部署的 zip 文件?
不,但是如果您查看我更新的屏幕截图,则该版本不再寻找 zip。 zip 是必需的格式吗?如果是这样我如何使这部分成为我的构建/工件?如果 zip 不是必需的格式,我有什么选择来生产适合 RM 使用的工件?
我尝试将 Web 部署任务添加到我的构建中,但它希望我添加我的天蓝色订阅信息以将部署发布到。这似乎不对,因为它会将单个构建部署到 Azure,并且没有理由让 Release Manager 管理我的环境。
谢谢丹尼尔。我添加了额外的 /p:OutDir=$(build.stagingDirectory) 你在你的答案中得到了相同的结果。当我浏览我的 web 部署包时,我的工件/drop 中的可用选项与我的代码仓库完全相同(请参阅我帖子中的最后一张图片)。我没有看到任何部署包。即使我有一个很好的构建并且它被链接为一个工件。以上是关于从 VSTS 发布管理将网站构建部署到 Azure的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Azure App 服务部署任务通过 VSTS 将多个 jar 文件上传到 Azure