[英]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
。
盡管如此,在上一個鏈接中提出了兩種解決方案,建議您執行以下步驟:
C:\Program Files\Git\bin
)在全局搜索路徑中,以便 Jenkins 找到 sh.exe根據您的安裝,您可能必須使用這些路徑:
使用 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 后,需要設置以下環境變量路徑。
通過設置以上配置,您將能夠在安裝在 Windows 機器上的 Jenkins 上的 Jenkinsfiles 中執行“sh”命令。
在為我工作的解決方案下,我遇到了同樣的錯誤。
安裝 git-bash
對於 Windows 使用“bat”而不是“sh”
將“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.