使用docker

时间:2017-10-03 10:23:17

标签: docker jenkins jenkins-pipeline

我已将Jenkins主机配置为使用docker,我可以连接到docker,我有一个简单的管道来测试它:

node ('docker-build-slave') {
    stage ('On slave') {
        sh 'ls -l'
        sh 'uname -a'
    }
}

当我发起构建并查看写入控制台的内容时,我得到:

  

由用户chris adkin发起   [Pipeline]节点
  还在等待安排任务
  标签'docker-build-slave'的所有节点都处于脱机状态

它只是挂起,我想知道是否有一些非常明显的错过,我是否需要为我的docker构建奴隶创建一个节点?。

如果我进入托管jenkins的机器,我可以看到构建从属容器已经启动。

4 个答案:

答案 0 :(得分:1)

您提供的docker-build-slave是过滤可用Jenkins代理(主/从)的标签。如果没有将此标签分配给主服务器或任何(可用)从服务器,则无法构建此作业。详细了解labels

要让Jenkins管道使用docker全局变量,例如如this example

中所述
node {
    checkout scm
    /*
     * In order to communicate with the MySQL server, this Pipeline explicitly
     * maps the port (`3306`) to a known port on the host machine.
     */
    docker.image('mysql:5').withRun('-e "MYSQL_ROOT_PASSWORD=my-secret-pw" -p 3306:3306') { c ->
        /* Run some tests which require MySQL */
        sh 'make check'
    }
}

答案 1 :(得分:0)

因此,经过一番挖掘,我回答自己的问题时有点羞耻,我偶然发现了这篇Jenkins文章:

https://issues.jenkins-ci.org/browse/JENKINS-44859

我使用Java JDK 7构建了我的图像,文章指出,我引用了Vinson Lee添加的评论:

Jenkins 2.54+需要Java 8。

我为我的图片修改了docker文件以安装open jdk 8,现在一切正常。

答案 2 :(得分:0)

修复工作正常,这是成功运行构建作业的控制台输出:

Started by user chris adkin
[Pipeline] node
Still waiting to schedule task
All nodes of label ‘docker-build-slave’ are offline
Running on docker-13b5a18eb067 in /home/jenkins/workspace/Pipeline With Docker Slave
[Pipeline] {
[Pipeline] stage
[Pipeline] { (On slave)
[Pipeline] sh
[Pipeline With Docker Slave] Running shell script
+ ls -l
total 0
[Pipeline] sh
[Pipeline With Docker Slave] Running shell script
+ uname -a
Linux localhost 4.9.49-moby #1 SMP Wed Sep 27 00:36:29 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

答案 3 :(得分:0)

如果您将node {}与特定的label一起使用,并且没有任何带有该标签设置的节点,则构建将永远卡住,如StephenKings answer所述。您还需要确保在使用单个节点(例如'master')时至少有2个执行程序设置,否则管道构建通常会卡住,因为它们由一个根构建和多个子构建组成。步骤。