我在虚拟机上运行 Jenkins 实例(注意:不在容器中,从现在开始称为“主机”)。在 Jenkins 构建期间,我正在“主机”上启动一个容器(从现在起称为“生成器”),该容器从“主机”安装 docker 套接字。在启动的“Builder”中,我调用 checkout 函数来克隆我的存储库,而不是从 Dockerfile 构建 docker 映像。然后在“主机”的泊坞窗上可以看到生成的图像。然而令我惊讶的是,即使在“Builder”退出后,我在“Builder”中签出的文件也存储在“Host”上的 Jenkins 工作区中。
我不确定为什么会这样。“Builder”的想法是在“Host”和结帐期间下载的任何内容之间进行干净的数据分离 - 在“Builder”关闭之后。
这背后的原因是,然后在“主机”上测试创建的图像,我想确保构建过程中没有残留物,而不必在两者之间推送到工件。
现在:有没有办法将“Builder”和“Host”的存储分开?
编辑
请在下面找到我正在使用的 Jenkins 文件:
node {
docker.image('ubuntu:17.04').withRun('-v /var/run/docker.sock:/var/run/docker.sock') { c ->
def checkoutVars = checkout([
$class: 'GitSCM',
branches: [[
name: '*/master'
]],
doGenerateSubmoduleConfigurations: false,
extensions: [],
submoduleCfg: [],
userRemoteConfigs: [[
credentialsId: 'credentialsID',
url: 'GitHub-URL'
]]
])
stage('Build docker image in container') {
sh "docker build --label build_id=$BUILD_ID --label build_url=$BUILD_URL --label git_commit=" + checkoutVars.GIT_COMMIT + " -t apache2:$BUILD_ID ."
}
}
stage('Inspect docker image'){
sh "docker image inspect \$(docker images | awk -vs='2' -ve='2' 'NR>=s&&NR<=e' | awk '{print \$3}')"
}
}
编辑1
更换时
docker.image('ubuntu:17.04').withRun('-v /var/run/docker.sock:/var/run/docker.sock') { c ->
和:
docker.image('ubuntu:17.04').inside("--volume=/var/run/docker.sock:/var/run/docker.sock") {
我得到:
/var/lib/jenkins/workspace/PROJECT@tmp/durable-fc0ee627/script.sh: 2: /var/lib/jenkins/workspace/PROJECT@tmp/durable-fc0ee627/script.sh: docker: not found
然而,Git-Repository 仍然被克隆到“主机”上。