Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用zip文件和ARM模板将机器人框架应用程序部署到azure?_Azure_Azure Devops_Azure Pipelines_Arm Template_Azure Bot Service - Fatal编程技术网

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

如何使用zip文件和ARM模板将机器人框架应用程序部署到azure?,azure,azure-devops,azure-pipelines,arm-template,azure-bot-service,Azure,Azure Devops,Azure Pipelines,Arm Template,Azure Bot Service,我们正试图通过RESTAPI启动的ARM部署将预构建的机器人人工制品部署到租户中。考虑到所有文档都使用az cli,我们很难从vs code/visual studio复制基于gui的部署的操作。手动部署最终会得到一个包含顶级DLL的应用程序,而我们当前的路线不包含内置DLL 我们生产机器人工件的管道是: - task: VSBuild@1 inputs: solution: '$(solution)' msbuildArgs: '/p:DeployOnBuild=true

我们正试图通过RESTAPI启动的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$codeditory--proj文件路径$projectFileName
,以生成bot应用程序的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提供的ZIP,因此没有推广DLL

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

有人知道为bot部署配置构建、应用程序和/或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

我不确定,为什么要使用两个任务来发布项目?在正常情况下,bot项目和web项目不是在同一个解决方案中吗?bot项目在编译和发布时会变成
bot.dll
文件吗?@JasonPan啊,为了简单起见,我们在我刚才缩短的步骤之间做了一个测试,但是你的想法是我们可以只做一个标准的c#构建和部署,而忽略机器人的部署过程?是的,我想是的。我认为这对你来说是最好的方式。当你说提供顶级DLL时,你的意思是把构建的DLL放在项目根文件夹中吗?您是如何创建部署zip文件的?@LeviLu MSFT我们一直在尽可能遵循本指南,但是,我们正在平衡它与支持多租户部署的需要,因此我们无法从az cli执行操作,因为我们无法提供我们收到的代表访问令牌。使用
az bot prepare deploy
命令无法通过arm中的msdeploy生成完全可部署的zip。文档中的
az webapp deployment source
命令使用kudu,kudu自行构建,并将DLL放入顶级目录。这太好了。如果您通过dotnet命令修复了它,您可以接受上述答案。事实上,只需先稍等一下:)