如何在 Jenkins ECS 插件中使用 ECR Image
Posted
技术标签:
【中文标题】如何在 Jenkins ECS 插件中使用 ECR Image【英文标题】:How to use ECR Image in Jenkins ECS plugin 【发布时间】:2020-03-29 07:20:09 【问题描述】:我有一个安装了 Amazon EC2 容器服务插件 的 Jenkins 服务器。我可以使用 jenkins/jnlp-slave 等示例图像在 ECS 中运行从属设备,但我想使用 AWS ECR 存储库中存在的我自己的自定义图像作为从属设备。
我在配置系统部分的 ECS 模板中将映像名称指定为 ID.dkr.ecr.us-east-1.amazonaws.com/python-slave:latest,
但它无法调出从机。我去ECS集群查看错误原因,我可以在任务详细信息中看到对于ECR图像它正在尝试使用以下命令来调出容器,
-url http://xyz:8084/ b0a06a93aa32251b22ae3a1a198e2d8a2057f2808b7947ed612b9e1eebb109c5 'ecs java slave-4b15n'
失败,错误为,
Status reason CannotStartContainerError: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"-url\": executable file not found in $PATH": unknown
Command ["-url","http://xyz:8084/","b0a06a93aa32251b22ae3a1a198e2d8a2057f2808b7947ed612b9e1eebb109c5","ecs java slave-4b15n"]
Privileged false
但是如果我使用像 jenkins/jnlp-slave 这样的示例图像,它使用以下命令并且运行良好
jenkins-agent -url http://xyz:8084/ bf8b42ab34d2691732026d8f454027c46d4ddaf9e9a7abc5af9c1ce417facf7a 'ecs java slave-x6p3z'
我试图找出这种行为的确切原因,但没有运气。无论如何我们可以使用ECS插件将ECR图像用作jenkins Slave。
【问题讨论】:
【参考方案1】:我也遇到了这个问题。您必须使用 jnlp-slave 映像,或带有构建工具的扩展映像或 cloudbees 从属映像(如果您使用的是 cloudbees)。
然后,您可以通过添加所需的库来扩展 docker 映像。您可以使用 'apt-get' 向其中添加图像
一个用python扩展从属图像的例子
FROM jenkins/jnlp-slave:latest
RUN apt-get install -y -f python3 python3-pip
将其视为通用 debian 映像。你可以安装任何你需要的东西。
【讨论】:
【参考方案2】:为了拉取 ECR 镜像,我们应该通过注册中心对 docker 客户端进行身份验证,那么只有你应该能够拉取镜像
例如。 $(aws ecr get-login --no-include-email --region us-east-1)
【讨论】:
ECS 实例能够拉取镜像,但由于命令从 -url 而不是问题描述的 jenkins-agent 开始,因此无法将其作为容器运行【参考方案3】:我遇到了同样的问题。我将自定义映像推送到 docker hub,并在 ECS 容器服务插件中将其路径指定为“用户名/存储库”。请记住,会有一个带有“最新”标签的图像版本。我仍在研究如何对 ECR 上的自定义图像做同样的事情。解决后我会在这里更新。
【讨论】:
以上是关于如何在 Jenkins ECS 插件中使用 ECR Image的主要内容,如果未能解决你的问题,请参考以下文章
“最新”标签在 ECS 任务定义和从 ECR 中提取的容器实例中如何工作?
Jenkins Amazon ECR 插件登录问题“授权令牌已过期”