Jenkins 在 Windows 上使用 Docker - 无法运行程序“nohup”
Posted
技术标签:
【中文标题】Jenkins 在 Windows 上使用 Docker - 无法运行程序“nohup”【英文标题】:Jenkins with Docker on Windows - Cannot run program "nohup" 【发布时间】:2018-08-24 14:14:26 【问题描述】:我将Jenkins Azure VM Agents Plugin 与Linux Master 一起使用,在Windows 代理上启动作业。
我已完成所有配置步骤,一切正常,直到我尝试在代理上使用 Docker。
我的管道脚本:
pipeline
agent
docker
image 'myurl.io/myimage:latest'
registryUrl 'https://myurl.io/'
registryCredentialsId '123456789abcdefg'
管道在运行此命令时似乎失败:
docker pull myurl.io/myimage:latest
报告的错误归结为:
Caused: java.io.IOException: Cannot run program "nohup" (in directory "C:\Jenkins\workspace\Test Pipeline Docker"): CreateProcess error=2, The system cannot find the file specified
一些注意事项:
我已经勾选了在图像上安装 git 的框:
Git 工具似乎已成功安装在代理 VM 上
This question 好像有关系,但不完全一样
我没有直接运行sh
命令,它是由插件运行的。
我认为我目前无权设置PATH
JIRA https://issues.jenkins-ci.org/browse/JENKINS-36776 上的这个问题是相关的,但它似乎没有得到修复,建议的解决方法似乎不适用于我的情况
我的问题
有没有办法让我的管道脚本工作?也许我可以在代理启动后以某种方式在代理上执行一些额外的命令 - 但在 docker pull
命令之前 - 将所需的目录添加到 PATH
?
或者还有其他解决方法吗?
【问题讨论】:
有兴趣,我也有同样的问题。你解决了吗? @realtebo 不,我还没有解决,但我有一段时间没有再次尝试。 是否可以提供一个文件nohup.bat
,它只正常执行其所有参数以解决Windows 上nohup
的缺失问题?
我要使用nohup
是一个unix 命令,代理是一个Win 服务器。在 S/O 中搜索 ["[jenkins] nohup 'c:\' is:question"](***.com/…) 以获取修复建议。
您的 Jenkins 从站似乎无法访问您机器上的 nohup 命令。你有没有在配置中检查过你的 Jenkins --> tools 你的 git-tools 的路径在哪里?
【参考方案1】:
我认为您已经找到的问题是正确的: Jenkins pipeline sh fail with "cannot run program nohup" on windows
但是,根据 docker-pipeline 插件的 wiki 页面,不支持在 windows worker 上运行 docker(虽然有点隐藏......):
对于具有 macOS、Windows 或其他代理且无法运行 Docker 守护程序的 Jenkins 环境,此默认设置可能有问题。 [https://www.jenkins.io/doc/book/pipeline/docker/#specifying-a-docker-label]
据我所知,有几次尝试添加该功能,但似乎没有添加(目前):https://github.com/jenkinsci/docker-workflow-plugin/pull/148
在最后一个链接中还指出,修复 sh/nohup 问题不会是您唯一的问题,例如 docker 插件将尝试运行 id
来获取用户。
尽管如此,您可以尝试通过编辑管道声明中的路径来使 linux 命令可用: https://***.com/a/45101214/12338776
编辑: 刚看到这个问题是3岁...嗯。但是由于到目前为止还没有答案,而且似乎还有很多人到这里来,它可能仍然对某人有所帮助。
【讨论】:
以上是关于Jenkins 在 Windows 上使用 Docker - 无法运行程序“nohup”的主要内容,如果未能解决你的问题,请参考以下文章
jenkins使用git SCM时changelog乱码(Jenkins部署在Linux上,任务在Windows Slave上构建)
使用 jenkins 在 Windows 远程环境 (VM) 上触发脚本