如何在 azureDevOps 应用服务中部署 angular 通用应用

How to deploy angular universal app in azureDevOps app service

我在 Azure Web 服务中部署 angular 通用应用程序时遇到问题我按照此步骤 但出现错误

##[error]Error: Publish using webdeploy options are supported only when using Windows agent. 

我猜问题出在创建应用服务时,在我的应用服务设置中 ( *发布(代码) *运行时堆栈(.NET Core 2.2) *操作系统 (Windows) )

# Node.js with Angular
# Build a Node.js project that uses Angular.
# Add steps that analyze code, save build artifacts, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/javascript

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: NodeTool@0
  inputs:
    versionSpec: '10.x'
  displayName: 'Install Node.js'

- script: |
    npm install -g @angular/cli
    npm install
    npm run build:ssr
  displayName: 'build the project'

- task: CopyFiles@2
  displayName: 'Copy dist files to staging'
  inputs:
    SourceFolder: '$(Build.SourcesDirectory)/dist'

    TargetFolder: '$(Build.ArtifactStagingDirectory)/app/dist'


- task: CopyFiles@2
  displayName: 'Copy server.js to the root'
  inputs:
    SourceFolder: '$(Build.ArtifactStagingDirectory)/app/dist'

    Contents: server.js

    TargetFolder: '$(Build.ArtifactStagingDirectory)/app'

- task: DeleteFiles@1
  displayName: 'Delete the dist/server.js'
  inputs:
    SourceFolder: '$(Build.ArtifactStagingDirectory)/app/dist'

    Contents: server.js

- task: AzureRmWebAppDeployment@3
  displayName: 'Azure App Service Deploy: website'
  inputs:
    azureSubscription: 'my subscription'
    WebAppName: 'my website'
    Package: '$(Build.ArtifactStagingDirectory)/app'
    GenerateWebConfig: true
    WebConfigParameters: '-Handler iisnode -NodeStartFile server.js -appType node'
    UseWebDeploy: true
    RemoveAdditionalFilesFlag: true

编辑 2(9/3/2020) Microsoft 正在远离发布管道。

“经典发布管道”

https://docs.microsoft.com/en-us/azure/devops/pipelines/release/?view=azure-devops

新“管道”

https://docs.microsoft.com/en-us/azure/devops/pipelines/create-first-pipeline?view=azure-devops&tabs=java%2Cyaml%2Cbrowser%2Ctfs-2018-2

编辑:

我在键入此内容后意识到,也许您的问题是您有“UseWebDeploy: true”,也许您可​​以通过将其设置为 false 来解决您的问题。下面是从发布管道中的相同任务设置截取的屏幕截图。

我仍然认为你最好的选择是从你的构建管道中删除部署任务,如下所述,因为构建管道不应该以这种方式使用。但这取决于你。

原答案:

从您的构建管道中删除此部分:

- task: AzureRmWebAppDeployment@3
  displayName: 'Azure App Service Deploy: website'
  inputs:
    azureSubscription: 'my subscription'
    WebAppName: 'my website'
    Package: '$(Build.ArtifactStagingDirectory)/app'
    GenerateWebConfig: true
    WebConfigParameters: '-Handler iisnode -NodeStartFile server.js -appType node'
    UseWebDeploy: true
    RemoveAdditionalFilesFlag: true

在 build.yml 文件的末尾添加一个发布步骤。这将允许您的发布管道从您的构建中获取工件。

- task: PublishBuildArtifacts@1

设置发布管道以部署您的构建。

  • 创建新管道
  • 从您的构建中添加工件
  • 然后添加一个阶段(即Dev、QA、Production)
  • Select“空作业”
  • 编辑舞台并添加任务
  • 添加 Azure 应用服务任务
  • 将 Azure App Service Deploy 上的版本号更新为版本 3(与您在 yaml 中使用的版本相同 - AzureRmWebAppDeployment@3)。
  • 按照您在 yaml 中的方式填写任务中的值。

“包或文件夹”选项的默认值可能不正确。您可以使用右侧的 3 个点导航和 select 正确的文件夹。如果您单击此按钮后什么也看不到,那么这很可能是因为您尚未使用上述“PublishBuildArtifact@1”更改启动构建。

继续往下看并扩展选项以找到您的其他配置设置。

如果您遇到任何问题,您可以通过滚动到任务顶部并单击“查看 YAML”来验证任务是否设置正确。然后你可以与你原来的 yaml 进行比较。

希望这对您有所帮助。