首页 > 解决方案 > 适用于 QnA Bot 的 Azure DevOps 管道

问题描述

我正在尝试为此示例聊天机器人获取构建和发布管道-> https://github.com/microsoft/BotBuilder-Samples/tree/main/samples/javascript_nodejs/49.qnamaker-all-features

我已经拥有所有基础设施资源。我计划稍后将其自动化。但目前我只需要部署代码。我能得到一些帮助吗?

Azure 项目具有签入代码的存储库。

构建管道需要是什么样的?

  1. 我想我需要为包做一个 npm install
  2. 使用 az bot prepare-deploy --code-dir "." 生成 web.config --lang Javascript
  3. 生成一个 zip 文件。

发布管道需要是什么样的?

  1. 我想我需要运行 az webapp deployment source config-zip --resource-group "" --name "" --src "<zipfile_from_build>"

这是我已经走了多远:

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

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

- script: |
    npm install
  displayName: 'Install all modules'

任何帮助表示赞赏!

提前感谢,杰克。

更新:这是我最后的 yaml

trigger:
- main

pool:
  vmImage: 'ubuntu-latest'

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

- script: |
     npm install
  displayName: 'npm install and build'

- task: ArchiveFiles@2
  inputs:
    rootFolderOrFile: '$(Build.SourcesDirectory)'
    includeRootFolder: false
    archiveType: 'zip'
    archiveFile: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
    replaceExistingArchive: true

- task: AzureRmWebAppDeployment@4
  displayName: 'Azure App Service Deploy: myTestBot'
  inputs:
    ConnectedServiceName: 'Release-Service-Connection'  
    azureSubscription: 'subscriptionName'
    WebAppName: 'BotName'
    ResourceGroupName: 'rgName'
    packageForLinux: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
    WebConfigParameters: '-Handler iisnode -NodeStartFile index.js -appType node' 

标签: node.jsazureazure-devopsazure-pipelineschatbot

解决方案


无需使用 az bot 生成 web.config。Azure App Service 部署任务可以自动生成 web.config。您可以查看以下示例。

trigger:
- main
pool:
  vmImage: 'ubuntu-latest'
steps:
- task: NodeTool@0
  inputs:
    versionSpec: '10.x'
  displayName: 'Install Node.js'

- script: |
     npm install
  displayName: 'npm install and build'

  #generate zip package using archivefile task.
- task: ArchiveFiles@2
  inputs:
    rootFolderOrFile: 'Build.SourcesDirectory'
    includeRootFolder: false
    archiveType: 'zip'
    archiveFile: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
    replaceExistingArchive: true
  
  #publish artifacts to azure devops server to be used in Release pipeline.
- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'drop'
    publishLocation: 'Container'

请查看示例构建、测试和部署 JavaScript 和 Node.js 应用程序以获取更多信息。

在创建发布管道之前。您需要创建一个azure 资源管理器服务连接,以将您的 Azure 订阅连接到 Azure devops。有关示例,请参见此线程。

然后您可以创建发布管道,将上述构建管道发布的工件添加为管道工件资源。并添加阶段。在发布管道中使用Azure 应用服务部署任务。

您可以配置 Azure 应用服务部署任务以生成 web.config。另请参阅此处了解更多信息。

在此处输入图像描述

您还可以查看此博客中的示例。

实际上,您可以直接在构建管道中使用 Azure App Service 部署,而无需创建发布管道。

- task: ArchiveFiles@2
  inputs:
    rootFolderOrFile: 'samples/javascript_nodejs/49.qnamaker-all-features'
    includeRootFolder: false
    archiveType: 'zip'
    archiveFile: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
    replaceExistingArchive: true
  
- task: AzureRmWebAppDeployment@4
  displayName: 'Azure App Service Deploy: leviwebApp'
  inputs:
    azureSubscription: 'azure Resource Manager service connection'
    WebAppName: leviwebApp
    packageForLinux: '$(Build.ArtifactStagingDirectory)/**/*.zip'
    WebConfigParameters: '-Handler iisnode -NodeStartFile index.js -appType node'

上述使用构建/发布管道和部署任务的方法是部署到 Azure 应用服务的一般方法。

但是,您也可以在构建管道的 azure cli 任务中编写 az cli commnads,以部署到 azure 应用服务。请参见下面的示例:

 ....
- script: |
    cd samples/javascript_nodejs/49.qnamaker-all-features
    npm install
    
  displayName: 'npm install and build'

- task: AzureCLI@2
  inputs:
    azureSubscription: 'azure Resource Manager service connection'
    scriptType: 'bash'
    scriptLocation: 'inlineScript'
    inlineScript: 'az bot prepare-deploy --code-dir "." --lang Javascript'
   
- task: ArchiveFiles@2
  inputs:
    rootFolderOrFile: 'Build.SourcesDirectory'
    includeRootFolder: false
    archiveType: 'zip'
    archiveFile: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
    replaceExistingArchive: true
- task: AzureCLI@2
  inputs:
    azureSubscription: 'azure Resource Manager service connection'
    scriptType: 'bash'
    scriptLocation: 'inlineScript'
    inlineScript: 'az webapp deployment source config-zip --resource-group "<resource-group-name>" --name "<name-of-web-app>" --src "<project-zip-path>"'

推荐阅读