Bash Jenkins管道sh出现故障,并出现“故障”;无法运行程序nohup";在窗户上

Bash Jenkins管道sh出现故障,并出现“故障”;无法运行程序nohup";在窗户上,bash,jenkins,windows-10,jenkins-pipeline,Bash,Jenkins,Windows 10,Jenkins Pipeline,我有windows 10,我想使用bash for Ubuntu for windows在Jenkins管道的Jenkins文件中执行sh命令,但它不起作用 我在Jenkins管道中有以下阶段: stage('sh how to') { steps { sh 'ls -l' } } 错误消息是: [C:\Program Files(x86)\Jenkins\workspace\PipelineScode]正在运行shell脚本 无

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

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

stage('sh how to') {
        steps {
            sh 'ls -l'
        }
    }
错误消息是:

[C:\Program Files(x86)\Jenkins\workspace\PipelineScode]正在运行shell脚本 无法运行程序“nohup”(在目录“C:\program Files(x86)\Jenkins\workspace\PipelineScode)”中):CreateProcess error=2,Le fichier spécifiéest introvable

我尝试使用更改Jenkins参数->shell可执行文件

C:\Windows\System32\bash.exe

但同样的错误


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

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

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

尽管如此,在上一个链接中提出了两个解决方案,建议您执行以下步骤:

  • 安装
  • 确保Git\bin文件夹(即:
    C:\Program Files\Git\bin
    )位于全局搜索路径中,以便Jenkins查找sh.exe
  • 在git bash中执行以下操作(相应地调整路径),使nohup可用于Jenkins:
    • 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”

将sh切换为bat对我来说很有效-我正在Windows上运行Jenkins。但只有在我解决了一个问题后,我才发现我的工具(maven和JDK)在Jenkins中也没有正确配置。

使用Git for Windows 2.16.2,我能够将C:\Program Files\Git\usr\bin添加到路径中(而不是C:\Program Files\Git\bin),因此我的sh命令可以在自由风格和管道构建中工作。不需要mklink。()

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

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

管道{ 任何代理人 舞台{ 阶段(‘编译阶段’){

}
}

我的观察结果是,代理似乎试图在运行agent.jar的上下文中运行nohup,而不是在容器中。不管我在容器中放了什么,错误消息都是一样的。通过将nohup和sh放在jenkins代理运行的路径中,我看到了行为上的变化

git config core.sparsecheckout#timeout=10 git签出-f c64c7bf905b6a4f5a8f85eb23bbd108f4c805386 sh:/home/jenkins/workspace/projname/simple_docker@tmp/持久-9fedc317/jenkins-log.txt:没有这样的文件或目录 sh:/home/jenkins/workspace/projname/simple_docker@tmp/持久-9fedc317/jenkins-result.txt.tmp:没有这样的文件或目录 mv:无法统计“/home/jenkins/workspace/projname/simple”_docker@tmp/持久-9fedc317/jenkins result.txt.tmp”:没有这样的文件或目录

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


当这个docker命令在命令行上手动运行时,它总是生成一行由单个句点字符组成的输出。我毫不怀疑这不是jenkins系统想要的。

所以您希望作业在WSL下运行。如果您希望所有作业在WSL下运行,您是否考虑过在W下安装jenkinsSL?那么一切都已经在GNU的土地上了,你不必从Jenkins配置中将windows的环境/文化连接到GNU。

在我的例子中,我在管道脚本中将“sh”替换为“bat”并工作。

windows不理解“sh”命令。要启用它,请添加

C:\ProgramFiles\Git\bin&

C:\ProgramFiles\Git\usr\bin

到系统环境变量路径,然后重新启动系统


然后在jenkins中执行您的命令,它就会工作。

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

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

一旦安装GitBash,就需要在下面设置环境变量path

  • C:\Program Files\Git\bin:此路径包含sh.exe、bash.exe和Git.exe
  • C:\Program Files\Git\usr\bin:此路径包含几个基于Linux的exe和dll(cat.exe、find.exe等)
  • 通过设置上述配置,您将能够在windows计算机上安装的Jenkins上的Jenkins文件中执行“sh”命令。

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