首页 文章

在Jenkins从属节点上运行的Jenkinsfile中执行docker build命令的最简单方法是什么?

提问于
浏览
6

我希望Jenkins文件做的基本示例:

node {
   sh 'docker build -t foo/bar .'
}

好像我需要将docker安装到正在执行我的Jenkinsfile的Jenkins从属映像上 . 有这么简单的方法吗? (Jenkins奴隶图像本身就是一个docker容器)

我的假设是否正确?

  • 与Jenkins主/从服务器一起运行时,Jenkins文件由Jenkins从服务器执行

  • 通过Manage Plugins部分安装的Jenkins插件(例如Docker插件或Gcloud SDK插件)仅安装在Jenkins主机上,因此我需要手动构建我的Jenkins slave docker镜像并在映像上安装docker?

因为我还需要访问'gcloud'命令(我_999999_已使用 gcr.io/cloud-solutions-images/jenkins-k8s-slave 图像为我的Jenkins奴隶 .

目前它错误地说“码头:没找到”

1 回答

  • 4

    我的假设是你想在Jenkins奴隶里面( docker build ,这是一个Kubernetes pod,我假设是由Kubernetes Jenkins Plugin创建的)

    要设置阶段,当Kubernetes创建将充当Jenkins从属的pod时,您在节点内执行的所有命令都将在Kubernetes pod内执行,在其中一个容器内(默认情况下只有一个容器,但是稍后会详细介绍 .

    所以你实际上是在基于 gcr.io/cloud-solutions-images/jenkins-k8s-slave 的容器内运行Docker命令,这很可能是基于the official Jenkins JNLP Slavewhich does not container Docker!

    从现在开始,您可以采取两种方法:

    以下是如何配置Jenkins插件的完整视图:

    enter image description here

    请注意,您使用不同的图像(您可以创建自己的图像并添加所需的任何二进制文件)并将Docker套接字安装在容器中 .

    • 第一种方法的问题是你创建一个从官方JNLP奴隶分叉的新图像并手动添加Docker客户端 . 这意味着只要Jenkins或Docker有更新,您就需要手动更新图像和整个配置,这是不可取的 . 使用第二种方法,你总是使用官方图像,你 use the JNLP slave to start other containers in the same pod.

    以下是下图中的完整文件以下是执行此操作的Jenkins插件文档

    enter image description here

    正如我所说,JNLP图像将启动您在同一个窗格中指定的容器 . 请注意,为了从容器中使用Docker,您仍然需要安装Docker袜子 .

    这是我发现在容器内运行的Jenkins JNLP从站内实现构建映像的两种方法 .

    该示例还演示了如何使用Jenkins的凭据绑定来推送映像,以及如何在构建过程中更新Kubernetes部署 .

    更多资源:

    谢谢,Radu M.

相关问题