0

我正处于开发项目的早期阶段——并试图确定 CI/CD 管道。在尝试将多个 docker 容器部署到单个 Azure 应用服务中时,我遇到了一些困惑。这是我要实现的目标的大纲,其中包含尽可能多的细节。任何关于我哪里出错的指导将不胜感激。我已经在我认为我已经正确配置的项目旁边打上了复选标记 。

  1. 将代码合并到 Github 存储库的主分支✔</li>
  2. 让 Azure DevOps Pipeline 自动触发✔
    • 通过运行 docker-compose.yml 文件(此文件由 Visual Studio 自动生成)构建我的所有服务,并使用当前构建 ID 标记它们
    • 将所有图像推送到我的 azure 容器注册表中
    • 将我的 docker-compose.yml 复制到工件暂存文件夹
    • 发布工件暂存文件夹
    • YML 实现:
    • trigger:
      - main
      
      pool:
        vmImage: 'ubuntu-latest'
      
      steps:
      - task: DockerCompose@0
        inputs:
          containerregistrytype: 'Azure Container Registry'
          azureSubscription: 'MYSUB'
          azureContainerRegistry: 'MYACR'
          dockerComposeFile: '**/docker-compose.yml'
          action: 'Build services'
          additionalImageTags: $(Build.BuildId)
      - task: DockerCompose@0
        inputs:
          containerregistrytype: 'Azure Container Registry'
          azureSubscription: 'MYSUB'
          azureContainerRegistry: 'MYACR'
          dockerComposeFile: '**/docker-compose.yml'
          action: 'Push services'
          includeSourceTags: true
          includeLatestTag: true
          additionalImageTags: $(Build.BuildId)
      - task: CopyFiles@2
        inputs:
          Contents: '**/docker-compose.yml'
          TargetFolder: '$(Build.ArtifactStagingDirectory)'
          OverWrite: true
      
      - task: PublishBuildArtifacts@1
        inputs:
          PathtoPublish: '$(Build.ArtifactStagingDirectory)'
          ArtifactName: 'drop'
          publishLocation: 'Container'
      
    • docker-compose.yml(通用名称)
      version: '3.4'
      
      services:
        service1:
          image: ${DOCKER_REGISTRY-}service1
          build:
            context: .
            dockerfile: src/PROJECTNAMEHERE/Dockerfile
      
        api1:
          image: ${DOCKER_REGISTRY-}api1
          build:
            context: .
            dockerfile: src/PROJECTNAMEHERE/Dockerfile
      
      
        service2:
          image: ${DOCKER_REGISTRY-}service2
          build:
            context: .
            dockerfile: src/PROJECTNAMEHERE/Dockerfile
      
  3. 拥有一个包含多个阶段的 Azure DevOps 发布管道,用于发布到 QA/Prod 环境❌
    • 添加一个要在 Release Creation 中设置的变量,我正在寻找针对的 BuildId(来自上面列出的管道)
    • 从上面添加工件
    • 有 2 个阶段,QA 和 Prod
    • 每个阶段只运行一个“容器部署上的 Azure Web 应用”任务
      • 我将“图像名称”设置为等于 ACR 中的 3 项服务
        myacrrepo.azurecr.io/service1:$(BuildId)
        myacrrepo.azurecr.io/api1:$(BuildId)
        myacrrepo.azurecr.io/service2:$(BuildId)
        
      • 我将“配置文件”设置为工件中的 docker-compose.yml
        $(System.DefaultWorkingDirectory)/_david#####.#####/drop/docker-compose.yml
        
      • 此步骤的 YML
        steps:
        - task: AzureWebAppContainer@1
          displayName: 'Azure Web App on Container Deploy'
          inputs:
            azureSubscription: 'MYSUB'
            appName: myapname
            containers: |
              myacrrepo.azurecr.io/service1:$(BuildId)
              myacrrepo.azurecr.io/api1:$(BuildId)
              myacrrepo.azurecr.io/service2:$(BuildId)
            multicontainerConfigFile: '$(System.DefaultWorkingDirectory)/_david#####.#####/drop/docker-compose.yml'
        

当一切都说完了,这个发布管道运行了——我的应用服务最终被配置为从 Docker Hub 获取它的图像——并且容器图像无法拉取,因为没有填充 docker hub 凭据并且图像名称在我的 docker-compose.yml 文件无效(例如,“${DOCKER_REGISTRY-}api1”)

我以前从未使用过 docker,所以我很难正确地解决这个问题。我已尝试包含尽可能多的信息,如果您还需要其他信息,请告诉我——再次感谢任何帮助。

4

1 回答 1

0

据我所知,Azure Web App 不支持在 docker-compose 文件中使用自定义变量,只能在 docker-compose 文件中使用支持选项。您可以看到支持选项。因此,您需要使用image不带选项build并将图像设置为真实图像名称,例如myacrrepo.azurecr.io/service1:tag. 当你使用 Azure Container Registry 时,它是一个私有注册表,所以你需要在 appSettings 中设置 ACR 的凭据。请参阅ACR 的环境变量

所以容器任务的 web 应用程序在 YAML 文件中应该是这样的:

steps:
- task: AzureWebAppContainer@1
  displayName: Azure Web App on Container Deploy
  inputs:
    appName: myapname
    azureSubscription: $(azureSubscription)
    appSettings:
      -DOCKER_REGISTRY_SERVER_USERNAME myacrrepo
      -DOCKER_REGISTRY_SERVER_URL myacrrepo.azurecr.io
      -DOCKER_REGISTRY_SERVER_PASSWORD xxxxxxxx
    multicontainerConfigFile: $(System.DefaultWorkingDirectory)/docker-compose.yaml
于 2021-01-07T09:17:28.020 回答