【问题标题】:Jenkins pipeline sh fail with "cannot run program nohup" on windowsJenkins 管道 sh 在 Windows 上因“无法运行程序 nohup”而失败
【发布时间】:2017-12-21 18:38:59
【问题描述】:

我有 Windows 10,我想在 Jenkins 管道中使用 bash for Ubuntu for windows 执行 Jenkinsfile 中的 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, Le fichier spécifié est introuvable

我尝试使用

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

C:\Windows\System32\bash.exe

但同样的错误...

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

【问题讨论】:

  • 您的路径周围可能缺少引号(包含空格)。如果不仔细检查文件夹中二进制文件的存在...另外,您的阶段代码与给定错误有什么关系?
  • 带/不带引号都不起作用...我尝试使用 shell 脚本和基本命令 (ls -l)... 这就是破坏并发送此错误消息的步骤!
  • 我的解决方法可能会对您有所帮助:stackoverflow.com/a/41610192/575643

标签: bash jenkins windows-10 jenkins-pipeline


【解决方案1】:

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

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

不过在上一个链接中提出了两种解决方案,建议您执行以下步骤:

  • 安装git-bash
  • 确保 Git\bin 文件夹(即:C:\Program Files\Git\bin)在全局搜索路径中,以便 Jenkins 找到 sh.exe
  • 使 nohup 可用于 Jenkins,在 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 "

【讨论】:

  • @John...上述解决方案对我不起作用,我安装了 git-bash 并设置了路径变量。还有在 bin 和 cmd 上建立的链接,我仍然有错误
  • 非常适合我
  • 我安装了 cygwin 但仍然出现同样的错误
【解决方案2】:

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

【讨论】:

  • 将 C:\Program Files\Git\usr\bin 添加到用户路径并重新启动 Jenkins 对我有用
  • 也为我工作(在 jenkins 重新启动后)。应该是公认的答案
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

    管道{ 代理任何 阶段{ stage ('编译阶段') {

            steps {
                withMaven(maven : 'apache-maven-3.6.1') {
                    bat'mvn clean compile'
                }
            }
        }
    

    } }

    【讨论】:

    • 为我工作。谢谢。
    • 感谢您的回答,它为我节省了很多时间。
    【解决方案5】:

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

    【讨论】:

      【解决方案6】:

      在我的例子中,我在 Pipeline 脚本中将 'sh' 替换为 'bat' 并开始工作。

      【讨论】:

        【解决方案7】:

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

        C:\Program Files\Git\bin &

        C:\Program Files\Git\usr\bin

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

        比在 jenkins 中执行你的命令,它会起作用。

        【讨论】:

          【解决方案8】:

          我的观察是,代理似乎试图在运行 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: cannot stat '/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 命令时,它始终会生成由单个句点字符组成的单行输出。我毫不怀疑这不是 jenkins 系统所要寻找的。​​p>

          【讨论】:

            【解决方案9】:

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

            【讨论】:

              【解决方案10】:

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

              【讨论】:

                【解决方案11】:

                在对我有用的解决方案下面我遇到了同样的错误..

                1. 安装 git-bash

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

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

                【讨论】:

                  【解决方案12】:

                  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”命令。

                  【讨论】:

                    猜你喜欢
                    • 2018-08-24
                    • 1970-01-01
                    • 1970-01-01
                    • 2023-03-20
                    • 2020-04-01
                    • 2016-01-28
                    • 2013-02-14
                    • 2017-02-24
                    • 2020-09-17
                    相关资源
                    最近更新 更多