如何使用 zip 文件和 ARM 模板将机器人框架应用程序部署到 Azure?

How to deploy a bot framework app to azure using a zip file and an ARM template?

我们正在尝试通过 REST API 启动的 ARM 部署将预构建的机器人工件部署到租户中。考虑到所有文档都使用 az cli,我们正在努力从 vs code / visual studio 复制基于 gui 的部署的操作。手动部署最终会得到一个在顶层包含 dll 的应用程序,而我们当前的路线不包含内置的 dll。

我们用于生成机器人工件的管道是:

- task: VSBuild@1
  inputs:
    solution: '$(solution)'
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactStagingDirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

- task: AzureCLI@2
  inputs:
    azureSubscription: 'GoSmarter Azure Service Connection'
    scriptType: 'ps'
    scriptLocation: 'scriptPath'
    scriptPath: 'az-Prepare.ps1'

其中 az-Prepare.ps1 包括 az bot prepare-deploy --lang Csharp --code-dir $codeDirectory --proj-file-path $projectFileName 以生成机器人应用程序的 zip,以便我们可以将其放入 blob 存储中以供在 ARM 模板中使用。

然后,我们使用 MSDeploy ARM 资源部署此 zip 文件,作为更大配置步骤的一部分。

    {
      "name": "MSDeploy",
      "type": "extensions",
      "location": "[variables('resourcesLocation')]",
      "apiVersion": "2015-08-01",
      "dependsOn": [
        "[resourceId('Microsoft.Web/sites', variables('webAppName'))]"
      ],
      "tags": {
        "displayName": "deployArchive"
      },
      "properties": {
        "packageUri": "[concat(variables('source'),'qnabotarchive.zip',parameters('SasToken'))]",
        "dbType": "None",
        "connectionString": ""
      }
    }

我们尝试将用于触发构建的 Kudu 应用程序设置设置为 true,但这似乎不适用于 MSDeploy 提供的 zips,因此不会提升 dll。

        {
          "name": "SCM_DO_BUILD_DURING_DEPLOYMENT",
          "value": "true"
        }

有谁知道配置构建、应用程序 and/or 用于机器人部署的 ARM 模板以在顶层提供 dll 的正确方法是什么?

最后,我们选择使用 dotnet core 命令来构建 bot 解决方案。

steps:
- task: NuGetToolInstaller@1

- task: NuGetCommand@2
  inputs:
    restoreSolution: '$(solution)'

- task: DotNetCoreCLI@2
  inputs:
    command: 'build'
    projects: '$(project)'
    arguments: '--configuration $(BuildConfiguration) -p:langversion=latest'
  displayName: "Build solution"

- task: DotNetCoreCLI@2
  displayName: "Publish Build Output"
  inputs:
    command: 'publish'
    publishWebProjects: true
    arguments: '--configuration $(BuildConfiguration) -p:langversion=latest --output $(Build.ArtifactStagingDirectory)'
    zipAfterPublish: false

- task: VSTest@2
  inputs:
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

- task: ArchiveFiles@2
  inputs:
    rootFolderOrFile: '$(Build.ArtifactStagingDirectory)/QnABot/*'
    includeRootFolder: true
    archiveType: 'zip'
    archiveFile: '$(Build.ArtifactStagingDirectory)/Chatbots/qnabotarchive.zip'
    replaceExistingArchive: true