簡體   English   中英

Jenkins 管道 sh 在 Windows 上失敗並顯示“無法運行程序 nohup”

[英]Jenkins pipeline sh fail with "cannot run program nohup" on windows

我有 Windows 10,我想使用 bash for Ubuntu for windows 在 Jenkins 管道的 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 腳本?

通過快速搜索,您的錯誤似乎與以下問題有關: 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"

使用 Git for Windows 2.16.2,我能夠將 C:\Program Files\Git\usr\bin 添加到 PATH(而不是 C:\Program Files\Git\bin),因此我的 sh 命令在 FreeStyle 和管道構建。 不需要 mklink。 來源

如果你在 Windows 上執行,只需將 sh 更改為 bat。 它會按預期工作。 例子:

管道{代理任何階段{階段('編譯階段'){

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

} }

使用 Git for Windows,我必須將C:\Program Files\Git\bin添加到 Jenkins 中從節點的PATH環境變量中(以訪問sh ),然后添加C:\Program Files\Git\usr\bin也到 Windows 從站本地的PATH (以訪問nohup )。

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

C:\Program Files\Git\bin &

C:\Program Files\Git\usr\bin

到系統環境變量 PATH,然后重新啟動系統。

比在詹金斯執行你的命令,它會工作。

將 sh 切換為 bat 對我有用——我在 Windows 上運行 Jenkins。 但是只有在我解決了由於我沒有在 Jenkins 中正確配置我的工具(maven 和 JDK)而引起的問題之后。

就我而言,我在管道腳本中將“sh”替換為“bat”並開始工作。

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

在為我工作的解決方案下,我遇到了同樣的錯誤。

  1. 安裝 git-bash

  2. 對於 Windows 使用“bat”而不是“sh”

  3. 將“C:\Program Files\Git\usr\bin”設置為 PATH(用戶變量)

我的觀察是代理似乎試圖在運行 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 命令時,它始終會生成由單個句點字符組成的單行輸出。 我毫不懷疑這不是詹金斯系統正在尋找的。

所以你希望作業在 WSL 下運行。 如果您希望所有作業都在 WSL 下運行,您是否考慮過在 WSL 下安裝 Jenkins? 然后一切都已經在 GNU 土地上,你不必從你的 Jenkins 配置中將 Windows 的環境/文化橋接到 GNU。

我在 Windows 10 中遇到了上述問題,只是將路徑“C:\Program Files\Git\usr\bin”添加到系統變量中,然后它就開始工作了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM