Azure应用服务部署版本(Azure DevOps)覆盖Azure门户中的多容器Docker撰写(预览)设置

时间:2019-02-13 12:45:05

标签: azure-devops azure-web-app-service azure-web-app-for-containers

我有一个运行App Service的多容器应用程序-容器Web应用程序。只要在“容器设置”标签下提供了Docker Compose(预览)配置,一切都可以正常工作。

当前,我正在使用Azure DevOps为特定容器创建生成,然后使用“容器设置”下的连续部署选项(在Azure门户中)从ACR中提取最新的已部署容器映像。这也很好。我可以为单个容器运行构建,并且仅部署特定容器,而不会影响Web应用程序。 (每个容器都是一个单独的项目,并且只有一个Dockerfile而不需要docker-compose)

但是,当我使用 Azure App Service Deploy (版本4. *)从Azure DevOp创建发行版时,Azure Portal中的Docker Compose(预览)配置被完全清除,并且默认情况下到单个容器,应用程序中断。需要Docker Compose配置,因为它可以使主容器了解其他容器。

我正在使用Azure App Service Deploy的版本4. *。我想使用Azure DevOps的发布功能,因为它提供了更多控制权。

有没有一种方法可以从 Azure App Service Deploy版本4 中指定docker-compose多容器配置,以便App Service知道多容器配置,而不会清除Docker Compose中的多容器配置(预览)

谢谢,  卡兰

2 个答案:

答案 0 :(得分:2)

Azure App Service deploy任务替换Release管道中的Azure Web App for Containers任务。有多个图像的参数和一个配置文件(Docker-Compose.yml)。

答案 1 :(得分:0)

正如Dave所提到的,可以使用AzureWebAppContainer任务来实现,但是文档中没有提及有关多容器部署的选项。

我不得不深入研究该任务的源代码以发现任务参数。

https://github.com/microsoft/azure-pipelines-tasks/blob/master/Tasks/AzureWebAppContainerV1/taskparameters.ts

我将总结我的设置,以使您了解如何使用它。我在YAML中定义了一个多阶段管道。分为两个阶段,第一阶段构建和发布Docker映像,第二阶段更新Web App for Containers应用服务。

第一阶段还生成工件,即docker-compose.yml文件,该文件用于配置Web App for Containers应用程序服务。在我的存储库中,我有此文件的模板。在流水线执行期间,将在此模板内替换docker映像的标签(例如,使用envsubst或sed)。然后,将生成的docker-compose.yml文件作为工件发布。

- task: PublishBuildArtifacts@1
  displayName: "Publish artifact"
  inputs:
    pathToPublish: $(Build.SourcesDirectory)/pipelines/assets/docker-compose.yml
    artifactName: yml

在管道的第二阶段,下载了工件,并将其用于配置容器的Web App。在下面的示例中,AzureWebAppContainerdeployment job的一个步骤。

- task: AzureWebAppContainer@1
  displayName: 'Azure Web App for Containers'
  inputs:
    azureSubscription: '<YOUR_SUBSCRIPTION>'
    appName: '<YOUR_WEB_APP_FOR_CONTAINERS>'
    multicontainerConfigFile: $(System.ArtifactsDirectory)/yml/docker-compose.yml

生成的docker-compose.yml作为工件存储,您以后随时可以查阅。