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 上卸载 Jenkins?

使用 jenkins 在 Windows 远程环境 (VM) 上触发脚本

使用 jenkins 管道在 Windows 服务器上部署 jar

在 Windows 上使用 npm install 时,Jenkins 脚本过早退出