gpt4 book ai didi

多个项目的 Azure 持续部署

转载 作者:行者123 更新时间:2023-12-04 20:37:56 25 4
gpt4 key购买 nike

我创建了一个 Azure 网站并将其连接到 Visual Studio Online,这会自动设置持续部署构建(根据 this page)。

最初这适用于一个项目的解决方案,但现在我添加了一个 Web API 项目作为后端。这被命名为它是 the two projects alphabetically 的第一个,所以现在它是唯一一个在 checkin 文件时构建和部署的项目。这引出了我的问题:

如何修改默认的持续部署构建来部署这两个应用程序?

我确信对构建模板或参数或构建使用的发布配置文件进行了相当简单的更改。唯一的问题是我不知道:A) 如何更改默认设置 TfvcContinuousDeploymentTemplate.12.xaml构建模板,以及 B) 如何修改持续部署构建中使用的发布配置文件。

我已经在 Visual Studio 中手动发布了这两个项目,并按照 this answer 中的说明将它们部署到正确的位置。 .我右键单击每个项目,单击发布,然后选择“Microsoft Azure Web Apps”发布目标(在填写所有设置后)将发布配置文件添加到我的项目中,并允许我按照自己的意愿手动部署它们。

不幸的是,似乎没有办法重新上传这些发布配置文件,以便它们可以在 CD 版本中使用。我已经将它们检查到源代码管理中,我只需要知道如何获得 CD 构建以使用它们。我怎样才能做到这一点?

最佳答案

通读后first link再次在我的问题中,我注意到您可以编辑构建定义(或模板)以指向您要使用的发布配置文件:

Path to Deployment Settings: The path to your .pubxml file for a web app, relative to the root folder of the repo. Ignored for cloud services.



不幸的是,这两者都不起作用,并且只允许您指定一个发布配置文件。据推测,即使指定此参数有效,构建仍将仅按字母顺序部署第一个应用程序。

这导致我到 this question and answer不过,这表明 Azure/TFVC 持续部署只需使用 MSBuild 的普通 Web 部署参数即可工作。在 Visual Studio Online 中查看我的构建的诊断日志证明确实如此;以下是相关论点:
C:\Program Files (x86)\MSBuild\14.0\bin\amd64\msbuild.exe /p:DeployOnBuild=true /p:CreatePackageOnPublish=true /p:DeployIisAppPath=mysitename

因此,根据该问题,要使用特定的发布配置文件,您只需在构建定义中设置额外的必要 MSBuild 参数:

enter image description here

每个项目都需要有一个名为“publishprofilename.pubxml”的发布配置文件,在本例中,已 checkin 源代码管理。我发现不需要用户名(这是您的站点名称,前面有一个美元符号),但不幸的是密码字符串是必需的。如果你不包括它,你会在构建中得到这样的错误:

Web deployment task failed. (Connected to the remote computer ("[mysitename].scm.azurewebsites.net") using the Web Management Service, but could not authorize.



我不需要其他参数,但必须包含密码似乎并不理想。不使用发布配置文件的默认部署设置必须以某种方式使用该密码进行授权,但我不知道如何进行。

因此,在进行此更改后,我导航到 [mysitename].azurewebsites.net,看起来仍然只有 Web API 项目正在部署。但是,通过转到站点的控制台并输入 dir D:\home\site\wwwroot我可以看到这两个项目实际上都在部署中。只是这两个项目都被部署到站点的根目录,地址为 D:\home\site\wwwroot . DeployIisAppPath每个发布配置文件中的设置都不同,但这些值会被忽略。这是因为 /p:DeployIisAppPath=mysitename MSBuild 的参数(如上所述)覆盖任何 PropertyGroup发布配置文件 *.pubxml 文件中的设置,如 this blog post 中所述.

我发现 Azure/TFVC 的持续部署过程通过 InitializeContinuousDeployment 起作用。 TfvcContinuousDeploymentTemplate.12.xaml 构建模板中的构建事件,紧接在 RunMSBuild 之前事件。这采用您在构建定义中指定的 MSbuild 参数,并将部署到 Azure 所需的参数附加到它们。不幸的是,这主要是硬编码的,这意味着它始终为解决方案中的所有 Web 项目指定一个部署路径。您不能单独使用发布配置文件将每个 Web 应用程序部署到不同的位置。

因此,一种解决方法是添加类似 BeforeBuild 的内容。 MSBuild 目标到每个项目,以覆盖 DeployIisAppPath 的命令行值.这样做的问题是在发布配置文件中指定并在发布向导中看到的路径将不再是实际用于部署的路径。

所以我采用的解决方案稍微好一些;这就是我们在新西兰将其描述为“huckery”。

基本上我添加了一个 InvokeMethod InitializeContinuousDeployment之间的构建事件和 RunMSBuild事件。此事件的参数如下:
DisplayName:
Configure build for using publish profiles (removes DeployIisAppPath MSBuild parameter)

GenericTypeArguments:
System.String

MethodName:
SetValue

TargetObject:
AdvancedBuildSettings

Parameters:
Direction: Type: Value
In String "MSBuildArguments"
In String String.Join(" ", AdvancedBuildSettings.GetValue(Of String)("MSBuildArguments", String.Empty).Split(New String() {" "}, StringSplitOptions.RemoveEmptyEntries).Where(Function(s) Not s.StartsWith("/p:DeployIisAppPath=")))

这样做是删除了 DeployIisAppPath完全来自 MSBuild 命令行参数列表的参数,因此它不会覆盖发布配置文件中的相同属性。如果您可以附加 /p:DeployIisAppPath="",而不是将字符串拆分和连接起来,那就更好了。到命令行,但这只是将属性设置为空字符串,您会收到错误消息:

"ConcatFullServiceUrlWithSiteName" task was not given a value for the required parameter "SiteAppName"



所以就像我说的那样,非常笨拙,但它是一种解决方案,允许您将多个 Web 项目持续部署到 Azure,而对默认设置进行最少的更改。

关于多个项目的 Azure 持续部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32027092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com