从monorepo构建多个映像,其中每个服务都有自己的Dockerfile

时间:2019-12-09 18:25:54

标签: azure docker azure-devops azure-container-service

我正在尝试学习Azure DevOps管道和AKS。最终目标是Build and deploy to Azure Kubernetes Service,但我将其分解为较小的部分,以便了解每个阶段的情况。

因此,我目前的目标是Build and push to Azure Container Registry

我正在使用一个基本的Monorepo,它具有简化的结构:

acr-test/
  client/
    Dockerfile
  db/
    Dockerfile
  server/
    Dockerfile

我想为应用程序的每个部分生成一个图像,以便生成arc-test-clientarc-test-server

当我在Azure DevOps中“创建管道”并让其构建azure-pipelines.yml时,当前发生的是它只是找到第一个Dockerfile并在其上建立了所有参数,而忽略了其他参数。

有些我很好奇:

  • 是否可以从一个azure-pipelines.yml创建多个图像?
  • 每个.yml是否需要多个Dockerfile
  • 我需要编写单独的.sh来分别构建和推送(example)吗?
  • 或者单存储区根本不可能做到这一点吗?

1 个答案:

答案 0 :(得分:3)

  1. 是的,您需要为此修改azure-pipelines.yml
  2. 不。可以全部使用一个或每个dockerfile一个
  3. 不是必须的,您可以使用.sh脚本,但在azure-pipelines.yml中使用docker任务可能更容易
  4. 是。

您将需要执行以下操作:

    steps:
    - task: Docker@2
      displayName: Build and push an image to container registry
      inputs:
        command: buildAndPush
        repository: $(imageRepository1)
        dockerfile: $(dockerfilePath1)
        containerRegistry: $(dockerRegistryServiceConnection)
        tags: |
          $(tag1)
    - task: Docker@2
      displayName: Build and push an image to container registry
      inputs:
        command: buildAndPush
        repository: $(imageRepository2)
        dockerfile: $(dockerfilePath2)
        containerRegistry: $(dockerRegistryServiceConnection)
        tags: |
          $(tag2)
    - task: Docker@2
      displayName: Build and push an image to container registry
      inputs:
        command: buildAndPush
        repository: $(imageRepository3)
        dockerfile: $(dockerfilePath3)
        containerRegistry: $(dockerRegistryServiceConnection)
        tags: |
          $(tag3)

或者在回购中可以有多个something.yml,并且每个组件都有单独的版本(更有意义,tbh)

或者,使用您的文件结构,您可以仅将相同的yaml文件用作模板,并仅提供其参数。这样可以减少代码重复并简化构建管理