如何在Jenkins ECS插件中使用ECR图像

时间:2019-12-04 13:11:56

标签: jenkins jenkins-plugins amazon-ecs

我有一个装有 Amazon EC2容器服务插件的Jenkins服务器。我可以使用示例映像(例如 jenkins / jnlp-slave )在ECS中运行从属服务器,但是我想使用自己在AWS ECR存储库中存在的自定义映像作为从属服务器。

我在“配置系统”部分的ECS模板中将映像名称命名为{ID} .dkr.ecr.us-east-1.amazonaws.com / python-slave:latest, enter image description here

但是它不能启动从属。我去了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图像用作詹金斯奴隶。

3 个答案:

答案 0 :(得分:1)

我也遇到了这个问题。您必须将jnlp-slave映像或扩展映像与构建工具或cloudbees从属映像一起使用(如果使用的是cloudbees)。

然后通过向其添加库来扩展Docker映像。您可以使用“ apt-get”向其中添加图像

使用python扩展从属映像的示例

FROM jenkins/jnlp-slave:latest
RUN apt-get install -y -f python3 python3-pip

将其像通用的debian映像一样处理。您可以安装所需的任何东西。

答案 1 :(得分:0)

要提取ECR映像,我们应该使用注册表对Docker客户端进行身份验证,然后只有您才能提取该映像

例如 $(aws ecr get-login --no-include-email --region us-east-1)

答案 2 :(得分:0)

我遇到了同样的问题。我将自定义映像推送到 docker hub,并将其在 ECS 容器服务插件中的路径指定为“用户名/存储库”。请记住,会有一个带有“最新”标签的图像版本。我仍在研究如何在 ECR 上对自定义图像执行相同操作。解决后我会在这里更新。