我们有一个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管道?
谢谢,玛希
答案 0 :(得分:5)
经过大量研究,反复试验,我找到了自己问题的答案。
AWS通过构建任务和服务端点为VSTS提供了扩展。您需要使用帐号,应用程序ID和密码配置AWS服务终端节点。然后,在您的构建/发布定义中;
使用开箱即用的docker build任务或shell / bash命令构建docker映像(例如; docker build -t your:tag。)
然后添加另一个构建步骤以将映像推送到AWS注册表中,为此,您可以使用AWS扩展任务(Amazon Elastic Container Registry推送映像)。每当您运行此构建定义时,Amazon Elastic Container Registry推送映像构建任务都会生成令牌并登录Docker客户端。您不必担心每12小时更新一次用户名/令牌,AWS扩展构建任务将为您完成此操作。
答案 1 :(得分:0)
您正在寻找这个
Amazon ECR Docker凭证助手 AWS documentation Amazon ECR Docker Credential Helper在这里使开发人员可以轻松使用ECR,而无需使用docker登录或编写逻辑来刷新令牌并提供对ECR存储库的透明访问。
Credential Helper可帮助持续开发环境中的开发人员自动进行对ECR存储库的身份验证过程,而不必每12小时重新生成令牌。此外,Credential Helper还在后台提供了令牌缓存,因此您不必担心受到限制或编写其他逻辑