node.js - 适用于 QnA Bot 的 Azure DevOps 管道
问题描述
我正在尝试为此示例聊天机器人获取构建和发布管道-> https://github.com/microsoft/BotBuilder-Samples/tree/main/samples/javascript_nodejs/49.qnamaker-all-features
我已经拥有所有基础设施资源。我计划稍后将其自动化。但目前我只需要部署代码。我能得到一些帮助吗?
Azure 项目具有签入代码的存储库。
构建管道需要是什么样的?
- 我想我需要为包做一个 npm install
- 使用 az bot prepare-deploy --code-dir "." 生成 web.config --lang Javascript
- 生成一个 zip 文件。
发布管道需要是什么样的?
- 我想我需要运行 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'
解决方案
无需使用 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>"'
推荐阅读
- javascript - 将变量传递给自定义按钮
- ipv6 - 通过电力线适配器的静态 IPv4 地址的连接问题
- ios - 如何访问应用程序以从应用程序外部保存数据
- firebase - 验证电子邮件后触发 Firebase 身份验证
- performance - 如何使用批处理渲染器删除 gl.bufferData 以绘制大量精灵?
- ruby-on-rails - 如何根据rails中的国家选择来选择州和城市?
- r - R图不显示任何标签
- javascript - 如何附加一个
- python - Discord.py on_message() 缺少参数
- c# - 如何让一个游戏对象 x 位置等于另一个对象 x 位置?(2D 统一游戏)