我正处于开发项目的早期阶段——并试图确定 CI/CD 管道。在尝试将多个 docker 容器部署到单个 Azure 应用服务中时,我遇到了一些困惑。这是我要实现的目标的大纲,其中包含尽可能多的细节。任何关于我哪里出错的指导将不胜感激。我已经在我认为我已经正确配置的项目旁边打上了复选标记 。
- 将代码合并到 Github 存储库的主分支✔</li>
- 让 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
- 拥有一个包含多个阶段的 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'
- 我将“图像名称”设置为等于 ACR 中的 3 项服务
当一切都说完了,这个发布管道运行了——我的应用服务最终被配置为从 Docker Hub 获取它的图像——并且容器图像无法拉取,因为没有填充 docker hub 凭据并且图像名称在我的 docker-compose.yml 文件无效(例如,“${DOCKER_REGISTRY-}api1”)
我以前从未使用过 docker,所以我很难正确地解决这个问题。我已尝试包含尽可能多的信息,如果您还需要其他信息,请告诉我——再次感谢任何帮助。