如何在运行Jenkins Pipeline Slave时升级docker服务器版本

如何在运行Jenkins Pipeline Slave时升级docker服务器版本,docker,jenkins,jenkins-pipeline,Docker,Jenkins,Jenkins Pipeline,我有一个奴隶在詹金斯的管道里运行。从属映像具有最新版本的docker,但服务器版本非常旧。我不知道Jenkins是如何启动容器的,或者Jenkins在docker服务器上使用什么。我创建了一个非常简单的jenkins文件: #!/usr/bin/groovy podTemplate(label: 'jenkins-pipeline', containers: [ containerTemplate(name: 'jnlp', image: 'myrepo/jnlp-d

我有一个奴隶在詹金斯的管道里运行。从属映像具有最新版本的docker,但服务器版本非常旧。我不知道Jenkins是如何启动容器的,或者Jenkins在docker服务器上使用什么。我创建了一个非常简单的jenkins文件:

#!/usr/bin/groovy

podTemplate(label: 'jenkins-pipeline', 
    containers: [
        containerTemplate(name: 'jnlp', image: 'myrepo/jnlp-docker:2.0')
    ],
    volumes:[
        hostPathVolume(mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock'),
    ]){
    node ('jenkins-pipeline') {
        sh("docker version")    
   }
}
“docker版本”命令的输出为:

Client:
  Version:      18.03.1-ce
  API version:  1.26 (downgraded from 1.37)
  Go version:   go1.9.5
  Git commit:   9ee9f40
  Built:        Thu Apr 26 07:17:14 2018
  OS/Arch:      linux/amd64
  Experimental: false
  Orchestrator: swarm

Server:
  Engine:
    Version:      1.13.1
    API version:  1.26 (minimum version 1.12)
    Go version:   go1.7.5
    Git commit:   092cba3
    Built:        Wed Feb  8 06:36:34 2017
    OS/Arch:      linux/amd64
    Experimental: false
那么服务器版本1.13.1是从哪里来的呢?如何升级Jenkins以使用更新的版本

编辑。programmerq有下面的解决方案,但我将在这里添加细节。Jenkins作为kubernetes容器运行,并且没有安装docker,但是Jenkins以某种方式共享docker守护程序,该守护程序从kubernetes主机节点一直到Jenkins管道从属容器。我的kubernetes集群(运行在AWS上,由kops创建)默认带有旧版本的docker。我必须用更高的docker版本更新kubernetes集群。步骤是

kops edit cluster 

#kops edit cluster opens vi.  Add docker property as shown below and save
spec:
  docker: #add docker config
    logDriver: json-file #required property.  Errors out when missing
    version: 17.09.0 #caution, only specific docker versions are supported

kops update cluster
kops rolling-update cluster --yes

看起来您正在将jenkins主机中的
/var/run/docker.sock
共享到容器中

当您的18.03.1-ce
docker
客户端连接到该
/var/run/docker.sock
套接字时,它正在与jenkins主机上运行的dockerd通信

如果您希望升级该docker守护程序,则应遵循与jenkins运行的平台相关的docker安装/升级说明


升级主机的dockerd后,容器中的
docker
客户端将看到您最终安装的任何版本。

我被卡住了,因为Jenkins本身运行在一个没有安装docker的容器中:ls/var/run/docker.sock ls:无法访问“/var/run/docker.sock”:没有这样的文件或目录我的kubernetes集群(在用kops创建的aws中)默认有一个旧的docker版本。我更新了该版本并得到了预期的结果。