我希望Jenkins文件做的基本示例:
node { sh 'docker build -t foo/bar .' }
@H_502_8@好像我需要将docker安装到正在执行我的Jenkinsfile的Jenkins从属映像上.有这么简单的方法吗? (Jenkins奴隶图像本身就是一个docker容器)
我的假设是否正确?
>当使用Jenkins主/从服务器运行时,Jenkins文件由Jenkins从服务器执行
>通过Manage Plugins部分安装的Jenkins插件(例如Docker插件或Gcloud SDK插件)仅安装在Jenkins主机上,因此我需要手动构建我的Jenkins slave docker镜像并在映像上安装docker?因为我还需要访问’gcloud’命令(我通过Kubernetes Helm / Charts运行Jenkins),我一直在使用gcr.io/cloud-solutions-images/jenkins-k8s-slave图像为我的Jenkins奴隶.
目前它错误地说“码头:没找到”
要设置阶段,当Kubernetes创建将充当Jenkins从属的pod时,您在节点内执行的所有命令都将在其中一个容器内的Kubernetes pod中执行(默认情况下,只有一个容器,但是稍后会详细介绍.
所以你实际上是在基于gcr.io/cloud-solutions-images/jenkins-k8s-slave的容器内运行Docker命令,这很可能是基于the official Jenkins JNLP Slave,而不是容器Docker!
从现在开始,您可以采取两种方法:
>使用基于JNLP从站的略微修改的映像,该映像还包含Docker客户端,并在容器内安装Docker套接字(/var/run/docker.sock).
(You can find details on this approach here).
Here is an image that contains the Docker client and kubectl
.
以下是如何配置Jenkins插件的完整视图:
Note that you use a different image (you can create your own and add any binary you want there) and that you mount the Docker socket inside the container.
@H_502_44@>第一种方法的问题是您创建一个从官方JNLP从属分叉的新映像并手动添加Docker客户端.这意味着每当Jenkins或Docker有更新时,您需要手动更新图像和整个配置,这是不可取的.
使用第二种方法,您始终使用官方图像,并使用JNLP从属设备启动同一窗格中的其他容器.07005
07006
@H_502_44@正如我所说,JNLP图像将启动您在同一个窗格中指定的容器.请注意,为了从容器中使用Docker,您仍然需要安装Docker袜子.
这是我发现在容器内运行的Jenkins JNLP从站内实现构建映像的两种方法.
该示例还演示了如何使用Jenkins的凭据绑定来推送映像,以及如何在构建过程中更新Kubernetes部署.
更多资源:
> deploy Jenkins to Kubernetes as Helm chart,configure plugins to install
谢谢,
拉杜M.