Azure DevOps发布管道:Angular和.NET Core应用程序

时间:2019-03-07 13:45:28

标签: azure-devops azure-pipelines-release-pipeline

我们正在尝试使用DevOps发布管道将Angular 7 / .NET Core应用程序发布到Azure。我有构建设置,可以将.NET和Angular构建创建为单独的工件,您可以在下面的屏幕快照中(在Package或Folder框下)看到这些工件。

Task1 Task2

从我阅读的内容来看,您似乎需要创建两个单独的发行任务以将构建版本部署到Web应用程序。但是,第二个版本似乎覆盖了第一个版本,这导致API无法启动。

有没有人知道一种确保给定阶段中的部署仅附加更改而不是替换更改的方法?还是在这里我想念其他东西?

2 个答案:

答案 0 :(得分:0)

  

有人知道确保给定阶段中的部署只是简单地添加更改而不是替换更改的方法吗?

根据您的经验,在部署API或Angular 7后,根据您的经验,我可以使用Kudu zip API将另一项上传到Azure WebApp。

您可以使用Powershell任务执行此操作。有关powershell演示代码的更多信息,请参考此link

如果可以接受创建另一个WebApp,则可以添加一个新WebApp并使用相同的服务计划(无额外费用)。然后,您可以分别部署它们。

答案 1 :(得分:0)

我的建议是为您的管道实施以下模式:

    在自己的工作中
  1. 'ng build --prod'angular应用程序,并将工件添加到管道中
  2. “ dotnet在其自己的工作中发布” dotnet核心api,与有角工作并行运行,并将工件添加到您的管道中
  3. 将Angular和Dotnet Core工件附加到一个新工件中。这是您要部署的最终程序包
  4. 部署最终程序包

您缺少第3步,因此您需要类似YAML中定义的以下逻辑的内容,在该逻辑中您将创建一个新的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