Jenkins声明式pipe道将不适用于Docker Swarm

运行这个简单的pipe道:

pipeline { agent { label 'docker-swarm' } /* ------------------- */ stages { stage("Build") { agent { docker { reuseNode true image 'maven:3.5.0-jdk-8' } } steps { sh 'mvn -version' } } } } 

产生这个错误:
Queued: All nodes of label 'docker-swarm' are offline

大约1分钟后,错误信息变为:
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

奇怪的是,当我在Manage Jenkins → Cloudtesting连接时,它可以连接没有问题:
在这里输入图像说明

有人有个想法解决这个问题吗?

更新11/27/2017 :截图显示了一个不正确的configuration,它不使用swarm,而是使用单个pipe理器节点。 要使用群,我切换到端口3376testing连接输出更改为Version = swarm/1.2.8, API Version = 1.22 。 我注意到我的错误,从来没有看到群体中的其他节点上运行的构build,并且swarmpipe理器不知所措。


在最初的问题中,不清楚正在使用各种Jenkins插件的版本,也不清楚群集是如何configuration的。

我已经成功地使用了:

  • jenkins2.73.3
  • Docker插件1.0.4
  • 独立(又名经典)docker群

在我写这个的时候, Docker插件不支持更新的Docker Swarm模式。 虽然一个非Swarmdocker引擎据说会工作。

像这样configuration: 詹金斯云泊坞站配置

证书提供了连接到群体所需的证书。 我记得我花了几次尝试才弄出来的。


以下pipe道工作:

 pipeline { agent { docker 'maven:3.5.0-jdk-8' } stages { stage('Build') { steps { sh 'mvn -version' } } } } 

输出:

 Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-03T19:39:06Z) Maven home: /usr/share/maven Java version: 1.8.0_141, vendor: Oracle Corporation Java home: /usr/lib/jvm/java-8-openjdk-amd64/jre Default locale: en, platform encoding: UTF-8 OS name: "linux", version: "4.4.93-boot2docker", arch: "amd64", family: "unix" 

与原始问题中的pipe道的主要区别是:

  • 在图像中使用单个pipe道作用域agent
  • 不使用reuseNode
  • 不使用label

我没有亲自尝试reuseNodelabel