amazon-web-services - 单个 Docker 镜像从 VSTS 构建/发布定义推送到 AWS 弹性容器注册表 (ECR)

标签 amazon-web-services docker azure-devops continuous-integration azure-pipelines

我们有一个 python docker 镜像,它需要构建/发布(CI/CD)到 AWS 容器注册表中。
目前 AWS 不支持使用 docker hub 私有(private)存储库运行 docker 任务,因此我们必须使用 ECR 而不是 docker hub。

我们的 CI/CD 管道使用 docker build 和 push 任务。 Docker 身份验证是通过 VSTS 项目中的服务端点完成的。

我们应该遵循几个步骤来为 ECR 设置 VSTS 服务端点。这需要执行 AWS CLI 命令(本地或云)以获取 docker 客户端登录的用户和密码,它看起来像;

aws ecr get-login --no-include-email

上面的命令输出一个带有用户名(AWS)和密码( token )的 docker login 命令。

这种方法的问题是访问 token 只会持续 12 小时。因此 CI/CD 任务需要每 12 小时更新一次服务端点,否则构建失败并出现未经授权的 token 异常。

我们还有其他选择是运行一些 shell 命令来执行 aws get-login 命令并在同一上下文中运行 docker build/push 命令。此选项需要将 aws cli 安装到构建代理中(我们使用的是公共(public) linux 代理)。
此外,shell 命令涉及带有环境/变量的笨拙任务配置。否则,我们将在构建步骤中公开 aws 应用程序 ID 和密码。

如果您使用 docker 和 AWS ecr 解决了 VSTS CI/CD 管道,您能否提出建议?

谢谢,马希

最佳答案

经过大量的研究、反复试验,我找到了自己问题的答案。

AWS 通过构建任务和服务终端节点为 VSTS 提供扩展。您需要使用帐号、应用程序 ID 和 key 来配置 AWS 服务终端节点。然后,在您的构建/发布定义中;

  • 使用开箱即用的 docker build 任务或 shell/bash 命令构建 docker 镜像(例如;docker build -t your:tag 。)
  • 然后添加另一个构建步骤以将镜像推送到 AWS 注册表,为此您可以使用 AWS 扩展任务(Amazon Elastic Container Registry Push Image)。每次运行此构建定义时,Amazon Elastic Container Registry Push Image 构建任务都会生成 token 和登录 docker 客户端。您不必担心每 12 小时更新一次用户名/ token ,AWS 扩展构建任务将为您完成。

  • build docker image

    Amazon Elastic Container Registry Push Image

    关于amazon-web-services - 单个 Docker 镜像从 VSTS 构建/发布定义推送到 AWS 弹性容器注册表 (ECR),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51363496/

    相关文章:

    amazon-web-services - 如何通过 CloudFormation YAML 将堆栈导出的现有 S3 存储桶导入另一个堆栈

    c# - 从 amazon s3 下载文件时出错

    amazon-web-services - 我可以在使用 cloudformation 时向 AWS Elastic Beanstalk 环境添加标签吗

    docker - 在 docker 容器中调用 OpenConnect VPN 客户端显示 TUNSETIFF 失败 : Operation not permitted

    c# - TF30063 : You are not authorized to access https://test. visualstudio.com/DefaultCollection

    amazon-web-services - Cloudformation EC2 实例在初始化时将外部 DNS 和 IP 添加到 .conf 文件

    java - 在 Docker 容器中运行 Java Gui 应用程序

    amazon-web-services - AWS JupyterHub pyspark notebook 使用 pandas 模块

    azure-devops - 找不到 VSTS Windows 机器文件副本 robocopy

    azure - 将 MyActivity 添加到事件选择列表以在 Azure Devops Services 中进行容量规划