2

我一直在尝试从 Azure 管道中的 AWS ECR 提取服务容器,但我不确定如何从 pipeline.yml 执行“aws ecr get-login”。这是我在 azure pipeline.yml 中的内容,但我当然会收到“没有基本身份验证凭据”错误。任何人都可以了解如何从 Azure 管道服务容器中的 AWS ECR 提取图像吗?

resources:
  containers:
  - container: sqlDB
    image: 1511260612345.dkr.ecr.ap-southeast-2.amazonaws.com/sqlDB:latest
    options: --name myDB
    env:
      ACCEPT_EULA: Y
      SA_PASSWORD: myPass123!

services:
  sql_db: sqlDB

我也尝试连接到 AWS 端点,但愚蠢的 azure 管道只允许 docker 注册表和它自己的 azure 容器注册表。

“管道无效。sqlDB 引用的映像注册表的预期服务连接类型为 'dockerregistry',但获得 AWS 用于服务连接 aws_test。”

4

3 回答 3

6

您的管道是正确的,@4c74356b41 通过添加“端点”提到的内容也是正确的。

以下是分步说明:

  1. 假设您拥有 AWS 访问权限和密钥,您需要创建配置文件凭据,或者您可以执行“aws configure”。之后执行以下命令:

aws ecr get-login --no-include-email --region [在此处输入您的区域]

或者如果您有 aws 个人资料

aws ecr get-login --no-include-email --profile [输入您的 aws 个人资料] --region [在此处输入您的区域]

从上面的输出中复制密码部分(在“-p”之后)(您需要将其粘贴到下面的 docker 注册表中)。

  1. 转到项目设置 -> 服务连接 -> 从新服务连接下拉列表中选择“Docker Registry”

在此处输入图像描述

  1. 输入以下详细信息:

在此处输入图像描述

  1. 将您在 pipeline.yml 中的端点设置为“aws_test”
于 2019-10-03T22:26:45.347 回答
1

不可抗力的问题是aws ecr get-login-password令牌仅在 12 小时内有效。这限制了所列解决方案的使用。

一种选择是使用aws-toolkit-azure-devops及其专用的 ECRPullImage 任务

  - job: ecrPull
    steps: 
    - task: ECRPullImage@1
      inputs:
        awsCredentials: '<AWSServiceConnection>' #Name of the AWS service connection
        regionName: '<region>'
        repository: '<repository>'
        imageSource: 'imagetag'
  - job: Build
    dependsOn: ecrPull
    condition: succeeded()
    container: 
      image: <accountId>.dkr.ecr.<region>.amazonaws.com/<repository>:<tag>
于 2021-08-16T10:29:36.527 回答
0

只是对上述答案的更新,您可以从 AWS ECR 获取图像并将其下载到 Azure Pipeline Executor:

1:您可以为此目的使用aws-vsts-tools ,只需从 Azure MarketPlace 添加 aws-vsts 扩展,然后创建具有适当权限的服务连接:

                "ecr:GetDownloadUrlForLayer",
                "ecr:BatchGetImage",
                "ecr:ListImages",
                "ecr:GetRepositoryPolicy",
                "ecr:DescribeImages",
                "ecr:GetAuthorizationToken",
                "ecr:ListTagsForResource",
                "ecr:UploadLayerPart",
                "ecr:PutImage",
                "ecr:UntagResource",
                "ecr:CompleteLayerUpload",
                "ecr:TagResource",
                "ecr:DescribeRepositories",
                "ecr:InitiateLayerUpload",
                "ecr:BatchCheckLayerAvailability"

然后,您可以运行 azure 管道任务中可用的docker build step 任务,它将下载图像,然后您可以通过上述任务执行它。

2:另一种方式将涉及完全 bash shell,您必须在 azure 管道中运行shell exec任务。在这里你将不得不运行

码头工人登录

aws ecr get-login-password --region xxx | docker login --username xxx --password-stdin account-number.dkr.ecr.regionxxx.amazonaws.com/repo-name

码头工人拉

docker pull account-number.dkr.ecr.regionxxx.amazonaws.com/repo-name:tag   
于 2020-04-12T14:40:49.510 回答