Jenkins Declarative Pipeline不再与Docker Swarm合作

时间:2017-10-17 06:30:37

标签: docker jenkins docker-swarm

运行这个简单的管道:

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中测试连接时,它可以连接而没有问题:
enter image description here

任何人都有热心解决这个问题?

1 个答案:

答案 0 :(得分:0)

更新11/27/2017 :屏幕截图显示了不使用swarm的错误配置,而是使用单个管理器节点。为了使用swarm,我切换到端口3376测试连接输出更改为Version = swarm/1.2.8, API Version = 1.22。在看不到构建在群集中的其他节点上运行,并且群体管理器不堪重负之后,我注意到了我的错误。

在原始问题中,不清楚使用各种Jenkins插件的版本,以及如何配置swarm。

我已成功使用:

  • Jenkins 2.73.3
  • Docker Plugin 1.0.4
  • Standalone(又名经典)Docker Swarm

在我写这篇文章的时候,Docker Plugin不支持更新的Docker Swarm模式。虽然非群集的码头工具可能会起作用。

配置如下: Jenkins Cloud Docker Configuration

凭据提供连接到群集所需的证书。我记得它让我尝试了一些事情。

以下管道有效:

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"

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

  • 使用带有图像的单个管道agent
  • 未使用reuseNode
  • 未使用label

我没有亲自尝试reuseNodelabel