由于身份验证,AWS ECR 推送在 Azure Devops 上失败

AWS ECR push fails on Azure Devops due to authentication

我正在为 CI/CD 使用 Azure DevOps 管道。我正在尝试 Dockerize 并将我的 docker 图像推送到 AWS ECR。我已经在 Azure Devops 上添加了 Docker Registry(并且可以访问所有管道),我创建并使用了具有 AdministrativeAccess 的 IAM 用户,并向 Azure Devops 添加了凭据。然而,在我的 Docker 推送任务中,我收到 unauthorized: authentication required 错误并且我的工作失败了。 这是我的推送任务

          - task: Docker@2
            displayName: "PUSH IMAGE TO AWS"
            inputs:
              containerRegistry: AWS
              repository: $(DOCKER_REPOSITORY_NAME)
              command: push
            enabled: true

无法使用IAM 用户直接登录AWS ECR。您将需要使用 AWS.AccessKeyIDAWS.SecretAccessKey 获取 Docker 身份验证令牌以登录 AWS ECR。参见 this document

有两种解决方法可以将 docker 图像推送到 AWS ECR。

1,如果您像您所做的那样在 Azure 管道中使用 Docker 任务。您将需要添加一个脚本任务来获取身份验证令牌并首先登录到 AWS ECR。见下文:

steps:
- script: |
    aws ecr get-login-password --region $(AWS_REGION) | docker login --username AWS --password-stdin $(AWS_ACCOUNT_ID).dkr.ecr.$(AWS_REGION).amazonaws.com
  displayName: 'Login to AWS'
  env:
    AWS_ACCESS_KEY_ID: $(AWS_ACCESS_KEY_ID)
    AWS_SECRET_ACCESS_KEY: $(AWS_SECRET_ACCESS_KEY)

- task: Docker@2
  displayName: Build docker image
  inputs:
    repository: $(DOCKER_REPOSITORY)
    command: buildAndPush

请查看this blog中的详细步骤。

2,更方便的解决方法是使用AWS Toolkit for Azure DevOps (Amazon ECR Push任务)。此任务将获取身份验证令牌并自动登录 docker 客户端。因此,在构建镜像后,您可以使用此任务将其推送到 Amazon ECR。

要使用 Amazon ECR 推送任务,您需要创建服务连接(AWS 类型)。

有关详细信息,请参阅