Cloudbees jenkins 插件无法启动容器

Cloudbees jenkins plugin fails to start containers

我正在尝试设置 jenkins 以使用 docker 容器作为构建环境,但我无法让它启动容器。我设置了一个作业,将启动 cloudbees/java-build-tools 图像作为测试

构建日志:

Started by user Esa Varemo
Building in workspace /var/jenkins_home/jobs/Test/workspace
$ /var/jenkins_home/tools/org.jenkinsci.plugins.docker.commons.tools.DockerTool/1.7.1/bin/docker -H tcp://192.168.0.193:4243 inspect cloudbees/java-build-tools
[
{
    "Id": "c5feab23f7a79204fc66a1576b4348fad4f1535c879be005084d5db190cc88da",
    "Parent": "608dd3644f8b9b229e59f511b641b226818bdaf97dbc208d34110be6bb87f57e",
    "Comment": "",
    "Created": "2015-10-28T14:04:00.338346675Z",
    "Container": "a4f3a773576c05f4a42d9fc96b1bc5514265b7d777985a7430d703fc4ceeb98f",
    "ContainerConfig": {
        "Hostname": "d7ae1572c5cc",
        "Domainname": "",
        "User": "jenkins",
        "AttachStdin": false,
        "AttachStdout": false,
        "AttachStderr": false,
        "PortSpecs": null,
        "ExposedPorts": {
            "4444/tcp": {}
        },
        "Tty": false,
        "OpenStdin": false,
        "StdinOnce": false,
        "Env": [
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
            "MAVEN_VERSION=3.3.3",
            "MAVEN_HOME=/usr/share/maven",
            "SCREEN_WIDTH=1360",
            "SCREEN_HEIGHT=1020",
            "SCREEN_DEPTH=24",
            "DISPLAY=:99.0"
        ],
        "Cmd": [
            "/bin/sh",
            "-c",
            "#(nop) EXPOSE 4444/tcp"
        ],
        "Image": "608dd3644f8b9b229e59f511b641b226818bdaf97dbc208d34110be6bb87f57e",
        "Volumes": null,
        "VolumeDriver": "",
        "WorkingDir": "",
        "Entrypoint": [
            "/opt/bin/entry_point.sh"
        ],
        "NetworkDisabled": false,
        "MacAddress": "",
        "OnBuild": [],
        "Labels": null,
        "Init": ""
    },
    "DockerVersion": "1.8.3-rc4",
    "Author": "Cyrille Le Clerc \u003ccleclerc@cloudbees.com\u003e",
    "Config": {
        "Hostname": "d7ae1572c5cc",
        "Domainname": "",
        "User": "jenkins",
        "AttachStdin": false,
        "AttachStdout": false,
        "AttachStderr": false,
        "PortSpecs": null,
        "ExposedPorts": {
            "4444/tcp": {}
        },
        "Tty": false,
        "OpenStdin": false,
        "StdinOnce": false,
        "Env": [
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
            "MAVEN_VERSION=3.3.3",
            "MAVEN_HOME=/usr/share/maven",
            "SCREEN_WIDTH=1360",
            "SCREEN_HEIGHT=1020",
            "SCREEN_DEPTH=24",
            "DISPLAY=:99.0"
        ],
        "Cmd": null,
        "Image": "608dd3644f8b9b229e59f511b641b226818bdaf97dbc208d34110be6bb87f57e",
        "Volumes": null,
        "VolumeDriver": "",
        "WorkingDir": "",
        "Entrypoint": [
            "/opt/bin/entry_point.sh"
        ],
        "NetworkDisabled": false,
        "MacAddress": "",
        "OnBuild": [],
        "Labels": null,
        "Init": ""
    },
    "Architecture": "amd64",
    "Os": "linux",
    "Size": 0,
    "VirtualSize": 1208820419
}
]
$ /var/jenkins_home/tools/org.jenkinsci.plugins.docker.commons.tools.DockerTool/1.7.1/bin/docker -H tcp://192.168.0.193:4243 run --rm --entrypoint /bin/true cloudbees/java-build-tools
$ /var/jenkins_home/tools/org.jenkinsci.plugins.docker.commons.tools.DockerTool/1.7.1/bin/docker -H tcp://192.168.0.193:4243 run --tty --rm --entrypoint /sbin/ip cloudbees/java-build-tools route
$ /var/jenkins_home/tools/org.jenkinsci.plugins.docker.commons.tools.DockerTool/1.7.1/bin/docker -H tcp://192.168.0.193:4243 run --tty --detach --workdir /var/jenkins_home/jobs/Test/workspace --volume /var/jenkins_home:/var/jenkins_home:rw --volume /tmp:/tmp:rw --net bridge --add-host dockerhost:172.17.42.1 --env BUILD_DISPLAY_NAME=#4 --env BUILD_ID=4 --env BUILD_NUMBER=4 --env BUILD_TAG=jenkins-Test-4 --env BUILD_URL=https://ci2.esav.fi/job/Test/4/ --env CLASSPATH= --env "DOCKER=/var/jenkins_home/tools/org.jenkinsci.plugins.docker.commons.tools.DockerTool/1.7.1/bin/docker -H tcp://192.168.0.193:4243" --env EXECUTOR_NUMBER=0 --env HUDSON_HOME=/var/jenkins_home --env HUDSON_SERVER_COOKIE=dfffb9d3e8496f1c --env HUDSON_URL=https://ci2.esav.fi/ --env JENKINS_SERVER_COOKIE=dfffb9d3e8496f1c --env JENKINS_URL=https://ci2.esav.fi/ --env JOB_NAME=Test --env JOB_URL=https://ci2.esav.fi/job/Test/ --env NODE_LABELS=master --env NODE_NAME=master --env WORKSPACE=/var/jenkins_home/jobs/Test/workspace cloudbees/java-build-tools bash
Error response from daemon: Cannot start container 2d50f5bf2672da535a9f977d2b5daf1e4b10611f4e601256b49e15188f754089: [8] System error: no such file or directory
FATAL: Failed to run docker image
java.lang.RuntimeException: Failed to run docker image
    at com.cloudbees.jenkins.plugins.docker_build_env.Docker.runDetached(Docker.java:205)
    at com.cloudbees.jenkins.plugins.docker_build_env.DockerBuildWrapper.startBuildContainer(DockerBuildWrapper.java:200)
    at com.cloudbees.jenkins.plugins.docker_build_env.DockerBuildWrapper.setUp(DockerBuildWrapper.java:173)
    at hudson.model.Build$BuildExecution.doRun(Build.java:156)
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:537)
    at hudson.model.Run.execute(Run.java:1741)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
    at hudson.model.ResourceController.execute(ResourceController.java:98)
    at hudson.model.Executor.run(Executor.java:408)
Finished: FAILURE

Docker 守护程序日志:

info msg="POST /v1.19/containers/create"
info msg="POST /v1.19/containers/cbfcfcd71bc8b9c829378d99b998b641aad6b081892e241251dbd51ce5775fdf/attach?stderr=1&stdout=1&stream=1"
info msg="POST /v1.19/containers/cbfcfcd71bc8b9c829378d99b998b641aad6b081892e241251dbd51ce5775fdf/start"
info msg="POST /v1.19/containers/cbfcfcd71bc8b9c829378d99b998b641aad6b081892e241251dbd51ce5775fdf/wait"
info msg="GET /v1.19/containers/cbfcfcd71bc8b9c829378d99b998b641aad6b081892e241251dbd51ce5775fdf/json"
info msg="GET /v1.19/containers/cbfcfcd71bc8b9c829378d99b998b641aad6b081892e241251dbd51ce5775fdf/json"
info msg="DELETE /v1.19/containers/cbfcfcd71bc8b9c829378d99b998b641aad6b081892e241251dbd51ce5775fdf?v=1"
info msg="GET /v1.19/containers/cbfcfcd71bc8b9c829378d99b998b641aad6b081892e241251dbd51ce5775fdf/json"
info msg="GET /v1.19/containers/cbfcfcd71bc8b9c829378d99b998b641aad6b081892e241251dbd51ce5775fdf/json"
info msg="POST /v1.19/containers/create"
info msg="GET /v1.19/containers/cbfcfcd71bc8b9c829378d99b998b641aad6b081892e241251dbd51ce5775fdf/json"
error msg="Handler for GET /containers/{name:.*}/json returned error: no such id: cbfcfcd71bc8b9c829378d99b998b641aad6b081892e241251dbd51ce5775fdf"
error msg="HTTP Error" err="no such id: cbfcfcd71bc8b9c829378d99b998b641aad6b081892e241251dbd51ce5775fdf" statusCode=404
info msg="GET /v1.19/images/cbfcfcd71bc8b9c829378d99b998b641aad6b081892e241251dbd51ce5775fdf/json"
error msg="Handler for GET /images/{name:.*}/json returned error: No such image: cbfcfcd71bc8b9c829378d99b998b641aad6b081892e241251dbd51ce5775fdf"
error msg="HTTP Error" err="No such image: cbfcfcd71bc8b9c829378d99b998b641aad6b081892e241251dbd51ce5775fdf" statusCode=404
info msg="GET /v1.19/containers/cbfcfcd71bc8b9c829378d99b998b641aad6b081892e241251dbd51ce5775fdf/json"
error msg="Handler for GET /containers/{name:.*}/json returned error: no such id: cbfcfcd71bc8b9c829378d99b998b641aad6b081892e241251dbd51ce5775fdf"
error msg="HTTP Error" err="no such id: cbfcfcd71bc8b9c829378d99b998b641aad6b081892e241251dbd51ce5775fdf" statusCode=404
info msg="GET /v1.19/images/cbfcfcd71bc8b9c829378d99b998b641aad6b081892e241251dbd51ce5775fdf/json"
error msg="Handler for GET /images/{name:.*}/json returned error: No such image: cbfcfcd71bc8b9c829378d99b998b641aad6b081892e241251dbd51ce5775fdf"
error msg="HTTP Error" err="No such image: cbfcfcd71bc8b9c829378d99b998b641aad6b081892e241251dbd51ce5775fdf" statusCode=404
info msg="GET /v1.19/containers/cbfcfcd71bc8b9c829378d99b998b641aad6b081892e241251dbd51ce5775fdf/json"
error msg="Handler for GET /containers/{name:.*}/json returned error: no such id: cbfcfcd71bc8b9c829378d99b998b641aad6b081892e241251dbd51ce5775fdf"
error msg="HTTP Error" err="no such id: cbfcfcd71bc8b9c829378d99b998b641aad6b081892e241251dbd51ce5775fdf" statusCode=404
info msg="GET /v1.19/images/cbfcfcd71bc8b9c829378d99b998b641aad6b081892e241251dbd51ce5775fdf/json"
error msg="Handler for GET /images/{name:.*}/json returned error: No such image: cbfcfcd71bc8b9c829378d99b998b641aad6b081892e241251dbd51ce5775fdf"
error msg="HTTP Error" err="No such image: cbfcfcd71bc8b9c829378d99b998b641aad6b081892e241251dbd51ce5775fdf" statusCode=404
info msg="POST /v1.19/containers/34e48b72ad7d9a854c8022fda4c10e7934c3efb100bee7be023070cfde582933/attach?stderr=1&stdout=1&stream=1"
info msg="POST /v1.19/containers/34e48b72ad7d9a854c8022fda4c10e7934c3efb100bee7be023070cfde582933/start"
info msg="GET /v1.19/containers/34e48b72ad7d9a854c8022fda4c10e7934c3efb100bee7be023070cfde582933/json"
info msg="POST /v1.19/containers/34e48b72ad7d9a854c8022fda4c10e7934c3efb100bee7be023070cfde582933/wait"
info msg="GET /v1.19/containers/34e48b72ad7d9a854c8022fda4c10e7934c3efb100bee7be023070cfde582933/json"
info msg="GET /v1.19/containers/34e48b72ad7d9a854c8022fda4c10e7934c3efb100bee7be023070cfde582933/json"
info msg="DELETE /v1.19/containers/34e48b72ad7d9a854c8022fda4c10e7934c3efb100bee7be023070cfde582933?v=1"
info msg="GET /v1.19/containers/34e48b72ad7d9a854c8022fda4c10e7934c3efb100bee7be023070cfde582933/json"
info msg="POST /v1.19/containers/create"
info msg="GET /v1.19/containers/34e48b72ad7d9a854c8022fda4c10e7934c3efb100bee7be023070cfde582933/json"
error msg="Handler for GET /containers/{name:.*}/json returned error: no such id: 34e48b72ad7d9a854c8022fda4c10e7934c3efb100bee7be023070cfde582933"
error msg="HTTP Error" err="no such id: 34e48b72ad7d9a854c8022fda4c10e7934c3efb100bee7be023070cfde582933" statusCode=404
info msg="GET /v1.19/images/34e48b72ad7d9a854c8022fda4c10e7934c3efb100bee7be023070cfde582933/json"
error msg="Handler for GET /images/{name:.*}/json returned error: No such image: 34e48b72ad7d9a854c8022fda4c10e7934c3efb100bee7be023070cfde582933"
error msg="HTTP Error" err="No such image: 34e48b72ad7d9a854c8022fda4c10e7934c3efb100bee7be023070cfde582933" statusCode=404
info msg="GET /v1.19/containers/34e48b72ad7d9a854c8022fda4c10e7934c3efb100bee7be023070cfde582933/json"
error msg="Handler for GET /containers/{name:.*}/json returned error: no such id: 34e48b72ad7d9a854c8022fda4c10e7934c3efb100bee7be023070cfde582933"
error msg="HTTP Error" err="no such id: 34e48b72ad7d9a854c8022fda4c10e7934c3efb100bee7be023070cfde582933" statusCode=404
info msg="GET /v1.19/images/34e48b72ad7d9a854c8022fda4c10e7934c3efb100bee7be023070cfde582933/json"
error msg="Handler for GET /images/{name:.*}/json returned error: No such image: 34e48b72ad7d9a854c8022fda4c10e7934c3efb100bee7be023070cfde582933"
error msg="HTTP Error" err="No such image: 34e48b72ad7d9a854c8022fda4c10e7934c3efb100bee7be023070cfde582933" statusCode=404
info msg="GET /v1.19/containers/34e48b72ad7d9a854c8022fda4c10e7934c3efb100bee7be023070cfde582933/json"
error msg="Handler for GET /containers/{name:.*}/json returned error: no such id: 34e48b72ad7d9a854c8022fda4c10e7934c3efb100bee7be023070cfde582933"
error msg="HTTP Error" err="no such id: 34e48b72ad7d9a854c8022fda4c10e7934c3efb100bee7be023070cfde582933" statusCode=404
info msg="GET /v1.19/images/34e48b72ad7d9a854c8022fda4c10e7934c3efb100bee7be023070cfde582933/json"
error msg="Handler for GET /images/{name:.*}/json returned error: No such image: 34e48b72ad7d9a854c8022fda4c10e7934c3efb100bee7be023070cfde582933"
error msg="HTTP Error" err="No such image: 34e48b72ad7d9a854c8022fda4c10e7934c3efb100bee7be023070cfde582933" statusCode=404
info msg="POST /v1.19/containers/fdc33c86ae5127b5717fe96a6bebe87a83de1605c750bb027f21895c910a31a2/start"
info msg="GET /v1.19/containers/fdc33c86ae5127b5717fe96a6bebe87a83de1605c750bb027f21895c910a31a2/json"
warning msg="exit status 1"
error msg="Error unmounting device fdc33c86ae5127b5717fe96a6bebe87a83de1605c750bb027f21895c910a31a2: UnmountDevice: device not-mounted id fdc33c86ae5127b5717fe96a6bebe87a83de1605c750bb027f21895c910a31a2"
error msg="Handler for POST /containers/{name:.*}/start returned error: Cannot start container fdc33c86ae5127b5717fe96a6bebe87a83de1605c750bb027f21895c910a31a2: [8] System error: no such file or directory"
error msg="HTTP Error" err="Cannot start container fdc33c86ae5127b5717fe96a6bebe87a83de1605c750bb027f21895c910a31a2: [8] System error: no such file or directory" statusCode=404
info msg="GET /v1.19/containers/fdc33c86ae5127b5717fe96a6bebe87a83de1605c750bb027f21895c910a31a2/json"
info msg="GET /v1.19/containers/fdc33c86ae5127b5717fe96a6bebe87a83de1605c750bb027f21895c910a31a2/json"
info msg="GET /v1.19/containers/fdc33c86ae5127b5717fe96a6bebe87a83de1605c750bb027f21895c910a31a2/json"
info msg="GET /v1.19/containers/fdc33c86ae5127b5717fe96a6bebe87a83de1605c750bb027f21895c910a31a2/json"
info msg="GET /v1.19/containers/fdc33c86ae5127b5717fe96a6bebe87a83de1605c750bb027f21895c910a31a2/json"

我可以从 jenkins 容器手动启动容器就好了:

jenkins@1ae38451b61e:/$ /var/jenkins_home/tools/org.jenkinsci.plugins.docker.commons.tools.DockerTool/1.7.1/bin/docker -H tcp://192.168.0.193:4243 run --rm -ti cloudbees/java-build-tools bash
jenkins@68dde85393e3:/$ exit
jenkins@1ae38451b61e:/$ 

Docker 版本在 host/daemon 和 jenkins/client 上都是 1.7.1。

注意到 "Verbose" 复选框帮助我找到了原因。

这部分命令揭示了问题:

$ docker -H tcp://192.168.0.193:4243 run --volume /var/jenkins_home:/var/jenkins_home:rw --volume /tmp:/tmp:rw cloudbees/java-build-tools bash
Error response from daemon: Cannot start container 2d50f5bf2672da535a9f977d2b5daf1e4b10611f4e601256b49e15188f754089: [8] System error: no such file or directory

该插件是 运行 docker 主机上的远程命令,它试图挂载 /var/jenkins_home/ 目录,该目录仅存在于 jenkins 容器中的客户端。

我通过使用 -v /var/jenkins_home/:/var/jenkins_home/-v /tmp/:/tmp/

重新启动 jenkins 容器来解决这个问题

/tmp 是必需的,因为 jenkins 存储 shell 脚本在那里执行,如 /tmp/hudson7422451548770990961.sh.

如果你在代理后面,那么尝试在启动你的 docker 容器时设置 jenkins 代理变量。

例如

-e JAVA_OPTS="-Dhttp.proxyHost=<proxyHostName> -Dhttp.proxyPort=<portNumber> -Dhttps.proxyHost=<proxyHostName> -Dhttps.proxyPort=<portNumber>"