Jenkins总是从声明性管道代理定义中提取docker镜像

时间:2017-09-20 16:28:42

标签: docker jenkins jenkins-pipeline

我有一个使用agent {any}定义的Jenkins管道。

但我想尝试在docker镜像上运行测试。根据文档,我可以通过以下方式实现:

pipeline {
     agent {
         docker { image 'centos/python-27-centos7:latest' }
     }
     stages {
        ...
     }
}

问题是我的Jenkins实例处于脱机状态,使用此配置时,它会在运行项目时尝试docker pull图像。

但是我在docker中加载了centos / python-27图像(docker images可见,并且可以使用docker run -i -t centos/python-27-centos7 /bin/bash

运行

我有什么方法可以在Jenkins中配置代理,这样它就不会尝试pull来自Docker Hub的图像吗?

3 个答案:

答案 0 :(得分:2)

Docker代理具有一个alwaysPull标志,您可以将其设置为true:

agent {
  docker {
    alwaysPull true
    image 'foo/bar'
  }
}

Jenkins具有管道语法生成器,可以在这些情况下提供帮助。在左侧的“作业”菜单中,有一个“管道语法”图标。

enter image description here

您可以在其中看到一些设置来帮助您生成管道指令。

enter image description here

答案 1 :(得分:1)

您可以尝试使用dockerfile代理。如果您构建图像所需的一切都是本地的,那么您就不必在线了。

pipeline {
 agent {
   dockerfile {
     filename "someOtherDockerfile"
     label "docker-nodes"
     args "-v /tmp:/tmp"
   }
 }
 stages {
    ...
 }

您的其他选择可能是设置私人码头注册表。 https://docs.docker.com/registry/deploying/

答案 2 :(得分:0)

您应该使用兄弟姐妹而不是嵌套容器图片。即尝试通过-v /var/run/docker.sock:/var/run/docker.sock将Docker守护程序套接字卷安装到Jenkins容器。这样,您就可以访问主机系统上可用的图像。