我有一个使用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的图像吗?
答案 0 :(得分:2)
Docker代理具有一个alwaysPull
标志,您可以将其设置为true:
agent {
docker {
alwaysPull true
image 'foo/bar'
}
}
Jenkins具有管道语法生成器,可以在这些情况下提供帮助。在左侧的“作业”菜单中,有一个“管道语法”图标。
您可以在其中看到一些设置来帮助您生成管道指令。
答案 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容器。这样,您就可以访问主机系统上可用的图像。