gpt4 book ai didi

jenkins - docker build 和 publish 插件使用

转载 作者:行者123 更新时间:2023-12-01 10:36:35 31 4
gpt4 key购买 nike

我让 jenkins 作为 Docker 容器运行,我尝试在此处安装 jenkins build 和 publish 插件,并在 jenkins 工作区中复制 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

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

最佳答案

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

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

进一步阅读关于 DinD 的一般内容和关于 Jenkins 的内容:

进一步阅读关于 DooD 的一般内容和关于 Jenkins 的内容:


更新

下面关于使用 Workflow 插件的信息不再正确。从那以后我写了一个插件叫docker-swarm-slave如果您使用我的jenkins-dood-image,它提供了一个构建包装器,您可以为一个自动为构建提供 Docker 容器的作业配置。或者直接在裸机上运行。

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


我有一个类似的用例:我希望能够使用运行 Jenkins Swarm client 的指定图像自动启动 Docker 容器。那将接管构建。我的jenkins-dood-image包含脚本 docker-slave这让我可以自动配置一个 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'
}

(假设您需要凭据进行身份验证,这些凭据使用 swarm-credentials 的短 ID 保存。)

关于jenkins - docker build 和 publish 插件使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34352436/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com