繁体   English   中英

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

[英]Jenkins always pull docker image from a declarative pipeline agent definition

我有一个使用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 中配置代理,使其不会尝试从 Docker Hub 中pull图像?

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

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

Jenkins 有一个 Pipeline Syntax Generator 可以在这些情况下提供帮助。 在左侧的 Job 菜单中,有一个“Pipeline Syntax”图标。

在此处输入图片说明

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

在此处输入图片说明

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

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

您的另一个选择可能是设置私有 docker 注册表。 https://docs.docker.com/registry/deploying/

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM