docker工人build立和发布插件的使用

我有jenkins作为Docker容器运行,我试图安装jenkins在这里构build和发布插件,并在jenkins工作区中复制Dockerfile,但是每当我运行构build,它给我:

Started by user Jenkins Admin Building in workspace /var/lib/jenkins/jobs/workspace [workspace] $ docker build -t index.docker.io/test/openshift:latest --pull=true /var/lib/jenkins/jobs/test/workspace ERROR: Cannot run program "docker" (in directory "/var/lib/jenkins/jobs/workspace"): error=2, No such file or directory java.io.IOException: Cannot run program "docker" (in directory "/var/lib/jenkins/jobs/workspace"): error=2, No such file or directory at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048) at hudson.Proc$LocalProc.<init>(Proc.java:244) at hudson.Proc$LocalProc.<init>(Proc.java:216) at hudson.Launcher$LocalLauncher.launch(Launcher.java:803) at hudson.Launcher$ProcStarter.start(Launcher.java:381) Build step 'Docker Build and Publish' marked build as failure Finished: FAILURE 

你能告诉我这是为什么吗?

在Docker容器内部,默认情况下,您无法访问docker -binary(因此错误消息“ No such file or directory )。

如果您想在Docker容器中使用Docker,则需要使用DinD (Docker-in-Docker)或DooD (Docker-Docker)。 第一个是你的Jenkins容器中的一个单独的Docker安装,第二个只安装通过卷的主机Docker安装。

进一步阅读有关DinD的一般情况和对Jenkins的看法

进一步阅读有关DooD和Jenkins的一般信息:


更新

以下有关使用Workflow插件的信息不再正确。 我写了一个名为docker-swarm-slave的插件,它提供了一个可以configuration为一个作业的构build包装器,如果你使用我的jenkins-dood -image或者直接运行金属。

不幸的是,文档相当稀less,但也许对某人有用。


我有一个类似的用例:我想能够自动启动一个运行Jenkins Swarm客户端的指定映像的Docker容器,该客户端将接pipe构build。 我的jenkins-dood -image包含一个脚本docker docker-slave ,它允许我自动configuration一个Docker-Swarm-slave,并使用Workflow-plugin和脚本来执行我需要的操作。

 node('master') { stage 'Create docker-slave' withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: 'swarm-login', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD']]) { sh 'docker-slave --job-name $JOB_NAME --build-number $BUILD_NUMBER -i pitkley/python-swarm:3.4 -u $USERNAME -p $PASSWORD -- -labels "${JOB_NAME}_${BUILD_NUMBER}"' } stage 'Execute on docker-slave' node("${env.JOB_NAME}_${env.BUILD_NUMBER}") { sh 'hostname' } stage 'Remove docker-slave' sh 'docker-slave --job-name $JOB_NAME --build-number $BUILD_NUMBER --rm' } 

(这假定您需要凭证来validation哪些与swarm-credentials的短ID保存。)