Jenkins docker构建和发布插件的使用

Jenkins docker构建和发布插件的使用,jenkins,docker,jenkins-plugins,Jenkins,Docker,Jenkins Plugins,我让jenkins作为Docker容器运行,我尝试在这里安装jenkins build and publish插件,并在jenkins workspace内复制Dockerfile,但每当我运行构建时,它都会给我: Started by user Jenkins Admin Building in workspace /var/lib/jenkins/jobs/workspace [workspace] $ docker build -t index.docker.io/test/openshi

我让jenkins作为Docker容器运行,我尝试在这里安装jenkins build and publish插件,并在jenkins workspace内复制Dockerfile,但每当我运行构建时,它都会给我:

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
由用户Jenkins Admin启动
在workspace/var/lib/jenkins/jobs/workspace中构建
[workspace]$docker build-t index.docker.io/test/openshift:latest--pull=true/var/lib/jenkins/jobs/test/workspace
错误:无法运行程序“docker”(在目录“/var/lib/jenkins/jobs/workspace”中):错误=2,没有这样的文件或目录
java.io.IOException:无法运行程序“docker”(在目录“/var/lib/jenkins/jobs/workspace”中):错误=2,没有这样的文件或目录
位于java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
位于hudson.Proc$LocalProc(Proc.java:244)
在hudson.Proc$LocalProc.(Proc.java:216)
位于hudson.Launcher$LocalLauncher.launch(Launcher.java:803)
位于hudson.Launcher$ProcStarter.start(Launcher.java:381)
生成步骤“Docker生成和发布”将生成标记为失败
完成:失败

您能告诉我为什么会这样吗?

在Docker容器中,默认情况下您无法访问
Docker
-二进制文件(因此出现错误消息
没有此类文件或目录

如果要在Docker容器中使用Docker,则需要使用DinD(Docker在Docker中)或DooD(Docker在Docker之外)。 第一个是Jenkins容器中的单独Docker安装,第二个仅通过卷装载主机Docker安装

进一步阅读关于DinD和Jenkins的一般信息:

进一步阅读《世界末日》和《詹金斯》的相关内容:


更新 下面关于使用工作流插件的信息不再正确。 此后,我编写了一个名为的插件,它提供了一个构建包装器,如果您使用my或直接在裸机上运行,您可以为一个作业自动配置一个Docker容器

不幸的是,文档非常稀少,但可能对某些人有用


我有一个类似的用例:我希望能够自动启动一个Docker容器,其中一个指定的映像运行一个将接管构建的。 My包含一个脚本,该脚本允许我自动配置Docker Swarm从站,并使用以下脚本在其上执行所需的操作:

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'
}
(这假设您需要使用短ID
swarm credentials
保存的凭据进行身份验证)