【问题标题】:Azure DevOps release pipeline: Angular and .NET Core applicationAzure DevOps 发布管道:Angular 和 .NET Core 应用程序
【发布时间】:2019-09-17 23:41:28
【问题描述】:
我们正在尝试使用 DevOps 发布管道将 Angular 7 / .NET Core 应用程序发布到 Azure。我有我的构建设置来创建 .NET 和 Angular 构建作为单独的工件,您可以在下面的屏幕截图中看到(在包或文件夹框下)。
根据我的阅读,您似乎需要创建两个单独的发布任务来将构建部署到 Web 应用程序。然而,第二个构建似乎覆盖了第一个,这导致 API 无法启动。
有没有人知道一种方法来确保给定阶段的部署只是附加更改而不是替换它们?还是我在这里缺少其他东西?
【问题讨论】:
标签:
azure-devops
azure-pipelines-release-pipeline
【解决方案1】:
我的建议是为您的管道实施以下模式:
- 'ng build --prod' Angular 应用程序在它自己的工作中,并将工件添加到您的管道中
- 'dotnet publish' dotnet core api 在它自己的作业中,与 angular 作业并行运行,并将工件添加到您的管道中
- 将 Angular 和 Dotnet Core 工件一起附加到一个新的工件中。这是您要部署的最终包
- 部署最终包
您缺少第 3 步,因此您需要在 YAML 中定义类似以下逻辑的内容,在其中创建一个新的 zip,该 zip 代表您在管道中实际部署的位。然后释放该工件,因为它代表了您在实例上运行的内容。
- job: CreateReleaseArtifact
displayName: 'Package for shared-hosting of angular app and web api'
pool:
vmImage: windows-2019
dependsOn:
- BuildNetcore
- BuildAngularApp
condition: succeeded()
steps:
- checkout: none
- download: current
- task: CopyFiles@2
displayName: 'Copy WebApi Files'
inputs:
SourceFolder: $(Pipeline.Workspace)/api
Contents: '**/*'
TargetFolder: $(Pipeline.Workspace)/package
includeRootFolder: false
- task: CopyFiles@2
displayName: 'Copy Angular Files'
inputs:
SourceFolder: $(Pipeline.Workspace)/webapp
Contents: 'wwwroot/**'
TargetFolder: $(Pipeline.Workspace)/package
includeRootFolder: true
OverWrite: true
- publish: $(Pipeline.Workspace)/package
artifact: package
【解决方案2】:
有没有人知道一种方法来确保给定阶段的部署只是附加更改而不是替换它们?
根据我的经验,在您的情况下,在部署 API 或 Angular 7 之后,您可以使用 Kudu zip API 将另一个上传到 Azure WebApp。
您可以使用 Powershell 任务来执行此操作。更多关于powershell演示代码的信息,可以参考link。
如果可以接受创建另一个 WebApp,您可以添加一个新 WebApp 并使用相同的服务计划(无额外费用)。然后你可以单独部署它们。