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 → Cloud
testing连接时,它可以连接没有问题:
有人有个想法解决这个问题吗?
更新11/27/2017 :截图显示了一个不正确的configuration,它不使用swarm,而是使用单个pipe理器节点。 要使用群,我切换到端口3376
和testing连接输出更改为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
。
我没有亲自尝试reuseNode
或label
。