Jenkins管道在Windows上无法运行“无法运行程序nohup”

时间:2017-07-17 09:33:31

标签: bash jenkins windows-10 jenkins-pipeline

我有windows 10,我想在Jenkins管道中使用bash为Ubuntu for windows执行Jen命令中的sh命令,但它不起作用

我的Jenkins管道中有以下阶段:

stage('sh how to') {
        steps {
            sh 'ls -l'
        }
    }

错误消息是:

  

[C:\ Program Files(x86)\ Jenkins \ workspace \ pipelineascode]运行shell脚本   无法运行程序“nohup”(在目录“C:\ Program Files(x86)\ Jenkins \ workspace \ pipelineascode”中):CreateProcess error = 2,Lefichierspécifiéestintrouvable

我尝试用

更改Jenkins参数 - > shell可执行文件
  

C:\ Windows \ System32下\ bash.exe

但同样的错误......

如何使用Windows 10的bash运行sh脚本?

12 个答案:

答案 0 :(得分:27)

通过快速搜索,您的错误似乎与以下问题有关:JENKINS-33708

主要原因似乎是Windows不支持sh步骤。例如,您可以使用bat或安装Cygwin

然而,在前一个链接中提出了两个解决方案,建议您执行以下步骤:

  • 安装git-bash
  • 确保Git \ bin文件夹(即:C:\Program Files\Git\bin)位于全局搜索路径中,以便Jenkins找到sh.exe
  • 为Jenkins提供nohup,在git-bash中执行以下操作(相应地调整路径):
    • mklink" C:\ Program Files \ Git \ bin \ nohup.exe" " C:\ Program Files \ git \ usr \ bin \ nohup.exe"
    • mklink" C:\ Program Files \ Git \ bin \ msys-2.0.dll" " C:\ Program Files \ git \ usr \ bin \ msys-2.0.dll"
    • mklink" C:\ Program Files \ Git \ bin \ msys-iconv-2.dll" " C:\ Program Files \ git \ usr \ bin \ msys-iconv-2.dll"
    • mklink" C:\ Program Files \ Git \ bin \ msys-intl-8.dll" " C:\ Program Files \ git \ usr \ bin \ msys-intl-8.dll"

根据您的安装,您可能必须使用以下路径:

  • mklink" C:\ Program Files \ Git \ cmd \ nohup.exe" " C:\ Program Files \ git \ usr \ bin \ nohup.exe"
  • mklink" C:\ Program Files \ Git \ cmd \ msys-2.0.dll" " C:\ Program Files \ git \ usr \ bin \ msys-2.0.dll"
  • mklink" C:\ Program Files \ Git \ cmd \ msys-iconv-2.dll" " C:\ Program Files \ git \ usr \ bin \ msys-iconv-2.dll"
  • mklink" C:\ Program Files \ Git \ cmd \ msys-intl-8.dll" " C:\ Program Files \ git \ usr \ bin \ msys-intl-8.dll"

答案 1 :(得分:1)

使用Windows 2.16.2的Git,我可以将C:\ Program Files \ Git \ usr \ bin添加到PATH(而不是C:\ Program Files \ Git \ bin),因此我的sh命令可以在FreeStyle和Pipeline构建。无需mklink。 (Source

答案 2 :(得分:1)

使用Windows版Git时,我必须将C:\Program Files\Git\bin添加到Jenkins中从节点的PATH环境变量中(才能访问sh),然后添加{{1} }也可以在Windows从站上本地C:\Program Files\Git\usr\bin上使用(以访问PATH)。

答案 3 :(得分:0)

将sh切换为bat对我有用-我在Windows上运行Jenkins。但是只有当我解决了由于我也没有在Jenkins中正确配置我的工具(Maven和JDK)而导致的问题之后。

答案 4 :(得分:0)

如果在Windows上执行,只需将sh更改为bat。它会按预期工作。 示例:

管道{     代理任何     阶段{         阶段(“编译阶段”){

WHERE JSON_SEARCH(category_id, 'all', '%1%') IS NOT NULL

} }

答案 5 :(得分:0)

我的观察是,代理似乎正在尝试在运行agent.jar的上下文中而不是在容器中运行nohup。我放入容器中没关系,错误消息是相同的。通过将nohup和sh放在jenkins代理运行的PATH中,我看到了行为上的变化。

git config core.sparsecheckout#timeout = 10 git checkout -f c64c7bf905b6a4f5a8f85eb23bbd108f4c805386 sh:/home/jenkins/workspace/projname/simple_docker@tmp/durable-9fedc317/jenkins-log.txt:没有这样的文件或目录 sh:/home/jenkins/workspace/projname/simple_docker@tmp/durable-9fedc317/jenkins-result.txt.tmp:没有这样的文件或目录 mv:无法统计'/home/jenkins/workspace/projname/simple_docker@tmp/durable-9fedc317/jenkins-result.txt.tmp':没有此类文件或目录

我看到一个文件夹/ home / jenkins / workspace / projname / simple_docker @ tmp / durable-9fedc317,其中包含文件“ script.sh”,内容为“ docker inspect -f。repositoryname:tagname”

当此docker命令在命令行上手动运行时,它始终会生成由单个句点字符组成的一行输出。毫无疑问,这不是詹金斯系统正在寻找的东西。

答案 6 :(得分:0)

因此,您希望作业在WSL下运行。如果要让所有作业在WSL下运行,是否考虑过在WSL下安装Jenkins?那么一切都已经在GNU领域中了,您不必在Jenkins配置中将Windows的环境/文化与GNU桥接起来。

答案 7 :(得分:0)

在我的情况下,我在Pipeline脚本中将“ sh”替换为“ bat”并起作用。

答案 8 :(得分:0)

Windows无法理解“ sh”命令。要启用此功能,请添加

C:\ Program Files \ Git \ bin&

C:\ Program Files \ Git \ usr \ bin

进入系统环境变量PATH,然后重新启动系统。

比用jenkins执行命令更有效。

答案 9 :(得分:0)

我在 Windows 10 中遇到了上述问题,只是将路径 "C:\Program Files\Git\usr\bin" 添加到系统变量然后它开始工作。

答案 10 :(得分:0)

我在以下解决方案中遇到了同样的错误..

  1. 安装 git-bash

  2. 对于 windows 使用“bat”而不是“sh”

  3. 将“C:\Program Files\Git\usr\bin”设置为PATH(用户变量)

答案 11 :(得分:-1)

sh 不是 windows 命令。在 Windows 中启用“sh”命令的简单方法是安装 GIT BASH

安装 GIT BASH 后,需要设置以下环境变量路径。

  1. C:\Program Files\Git\bin : 此路径包含 sh.exe、bash.exe 和 git.exe
  2. C:\Program Files\Git\usr\bin : 此路径包含几个基于 Linux 的 exe 和 dll(cat.exe、find.exe 等)

通过设置以上配置,您将能够在安装在 windows 机器上的 Jenkins 上的 Jenkinsfiles 中执行 'sh' 命令。

相关问题