Azure 管道服务容器 - 来自 AWS ECR 的图像
Azure pipeline service container - image from AWS ECR
我一直在尝试从 Azure 管道中的 AWS ECR 中提取服务容器,但我不确定如何从 pipeline.yml 中执行 "aws ecr get-login"。这是我的 azure pipeline.yml 中的内容,但我当然会遇到 "no basic auth credentials" 错误。谁能阐明如何从 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 容器注册表。
"The pipeline is not valid. Expected 'dockerregistry' service connection type for image registry referenced by sqlDB, but got AWS for service connection aws_test."
您的管道是正确的,@4c74356b41 通过添加 "endpoint" 提到的内容也是正确的。
以下是分步说明:
- 假设您有 AWS 访问权限和密钥,您需要创建配置文件凭证,或者您可以 "aws configure"。之后执行以下命令:
aws ecr get-login --no-include-email --region [enter you region here]
或者如果您有 aws 配置文件
aws ecr get-login --no-include-email --profile [enter your aws profile] --region [enter you region here]
从上面的输出中复制密码部分(在“-p”之后)(您需要将其粘贴到下面的 docker 注册表中)。
- 转到项目设置 -> 服务连接 -> select "Docker Registry" 从新的服务连接下拉列表
- 输入详细信息如下:
- 将 pipeline.yml 中的端点设置为 "aws_test"
只是对上述答案的更新,您可以如何从 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"
然后您可以 运行 docker 构建步骤任务 在 azure 管道任务中可用,它将下载图像,然后您可以通过你上面的任务。
2: 另一种方法将完全涉及 bash shell,您将不得不 运行 一个 shell exec 天蓝色管道中的任务。在这里你将不得不 运行
Docker 登录
aws ecr get-login-password --region xxx | docker login --username xxx --password-stdin account-number.dkr.ecr.regionxxx.amazonaws.com/repo-name
Docker拉
docker pull account-number.dkr.ecr.regionxxx.amazonaws.com/repo-name:tag
主要问题是 aws ecr get-login-password
令牌仅对 12 hours 有效。这限制了列出的解决方案的使用。
其中一种选择是使用 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>
更新:
作业可能被安排给多个代理,因此这种方法失败了。这必须按要求设置(您可以使用名称、功能等以外的其他属性):
pool:
name: <YourPoolName>
demands:
- agent.name -equals <YourAgentName>
我一直在尝试从 Azure 管道中的 AWS ECR 中提取服务容器,但我不确定如何从 pipeline.yml 中执行 "aws ecr get-login"。这是我的 azure pipeline.yml 中的内容,但我当然会遇到 "no basic auth credentials" 错误。谁能阐明如何从 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 容器注册表。
"The pipeline is not valid. Expected 'dockerregistry' service connection type for image registry referenced by sqlDB, but got AWS for service connection aws_test."
您的管道是正确的,@4c74356b41 通过添加 "endpoint" 提到的内容也是正确的。
以下是分步说明:
- 假设您有 AWS 访问权限和密钥,您需要创建配置文件凭证,或者您可以 "aws configure"。之后执行以下命令:
aws ecr get-login --no-include-email --region [enter you region here]
或者如果您有 aws 配置文件
aws ecr get-login --no-include-email --profile [enter your aws profile] --region [enter you region here]
从上面的输出中复制密码部分(在“-p”之后)(您需要将其粘贴到下面的 docker 注册表中)。
- 转到项目设置 -> 服务连接 -> select "Docker Registry" 从新的服务连接下拉列表
- 输入详细信息如下:
- 将 pipeline.yml 中的端点设置为 "aws_test"
只是对上述答案的更新,您可以如何从 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"
然后您可以 运行 docker 构建步骤任务 在 azure 管道任务中可用,它将下载图像,然后您可以通过你上面的任务。
2: 另一种方法将完全涉及 bash shell,您将不得不 运行 一个 shell exec 天蓝色管道中的任务。在这里你将不得不 运行
Docker 登录
aws ecr get-login-password --region xxx | docker login --username xxx --password-stdin account-number.dkr.ecr.regionxxx.amazonaws.com/repo-name
Docker拉
docker pull account-number.dkr.ecr.regionxxx.amazonaws.com/repo-name:tag
主要问题是 aws ecr get-login-password
令牌仅对 12 hours 有效。这限制了列出的解决方案的使用。
其中一种选择是使用 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>
更新: 作业可能被安排给多个代理,因此这种方法失败了。这必须按要求设置(您可以使用名称、功能等以外的其他属性):
pool:
name: <YourPoolName>
demands:
- agent.name -equals <YourAgentName>