Docker映像从VSTS构建/发布定义推入AWS弹性容器注册表(ECR)

时间:2018-07-16 13:52:03

标签: amazon-web-services continuous-integration azure-devops dock

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

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

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

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

Above命令输出带有用户名(AWS)和密码(令牌)的docker login命令。

此方法的问题是访问令牌将仅持续12个小时。因此,CI / CD任务要求每12个小时更新一次服务端点,否则构建会因未授权令牌异常而失败。

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

请问您是否已使用带有AWS ecr的Docker解决了VSTS CI / CD管道?

谢谢,玛希

2 个答案:

答案 0 :(得分:5)

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

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

  1. 使用开箱即用的docker build任务或shell / bash命令构建docker映像(例如; docker build -t your:tag。)

  2. 然后添加另一个构建步骤以将映像推送到AWS注册表中,为此,您可以使用AWS扩展任务(Amazon Elastic Container Registry推送映像)。每当您运行此构建定义时,Amazon Elastic Container Registry推送映像构建任务都会生成令牌并登录Docker客户端。您不必担心每12小时更新一次用户名/令牌,AWS扩展构建任务将为您完成此操作。

build docker image

Amazon Elastic Container Registry Push Image

答案 1 :(得分:0)

您正在寻找这个

Amazon ECR Docker凭证助手 AWS documentation Amazon ECR Docker Credential Helper在这里使开发人员可以轻松使用ECR,而无需使用docker登录或编写逻辑来刷新令牌并提供对ECR存储库的透明访问。

Credential Helper可帮助持续开发环境中的开发人员自动进行对ECR存储库的身份验证过程,而不必每12小时重新生成令牌。此外,Credential Helper还在后台提供了令牌缓存,因此您不必担心受到限制或编写其他逻辑