簡體   English   中英

來自Jenkins的執行Windows批處理命令失敗,但在cmd.exe中運行正常

[英]Execute windows batch command from Jenkins fails but runs fine in cmd.exe

我試圖在MSbuild之后在jenkins中運行此命令

xcopy "C:\Program Files (x86)\Jenkins\workspace\trunk\Projects\results\results\obj\Debug\Package\PackageTmp" "Y:\Extraction_Zone\Jenkins\" /E 

Y:是映射的網絡驅動器。 這在cmd.exe中運行正常但是當試圖在Jenkins中運行它時,我收到錯誤Invalid drive specification

以下是jenkins的輸出:

Time Elapsed 00:00:04.03
[trunk] $ cmd /c call C:\Windows\TEMP\hudson3389873107474371072.bat

C:\Program Files (x86)\Jenkins\workspace\trunk>xcopy "C:\Program Files (x86)\Jenkins\workspace\trunk\Projects\results\results\obj\Debug\Package\PackageTmp" "Y:\Extraction_Zone\Jenkins\" /E 
Invalid drive specification
0 File(s) copied

C:\Program Files (x86)\Jenkins\workspace\trunk>exit 4 
Build step 'Execute Windows batch command' marked build as failure
Finished: FAILURE

任何幫助,將不勝感激。

我曾經有過類似的問題。 嘗試在services.msc下授予Jenkins服務“以此帳戶登錄”,並確保您在其中鍵入的帳戶與用於運行cmd.exe的帳戶相同。

在此輸入圖像描述

這些基於Java JAR文件的命令對我有用:
CMD
凈使用x:\\\\
xcopy“dist \\”x:\\ / Y.

就是這樣! 我花了很多時間弄清楚這個問題,直到我寫了CMD和NET USE才行不通!
我既不需要更改jenkins服務的權限也不需要使用runas命令。

但我必須提到每個人都有對網絡驅動器的讀寫權限。

我的Windows任務運行批處理文件時遇到了同樣的問題(我知道它不完全相同)我嘗試將文件復制到網絡位置即共享驅動器。 我也使用了UNC路徑和映射驅動器,但錯誤是一樣的。 對我來說這是錯誤號4 - MS DOS錯誤代碼。 解決方案是使用net use命令! 希望它有所幫助。

容易修復大多數事情。

  1. 使用您嘗試運行的內容創建一個批處理命令,filename.bat,其中包含命令提示符文本。
  2. 為批處理命令創建一個普通的Windows快捷方式,編輯快捷方式高級屬性並選中“以管理員身份運行”(棘手的棘手)。
  3. 現在從jenkins命令行調用運行filename.lnk快捷方式,這將使您了解所有爵士樂。

:)

adarshr的解決方案(即,修改服務的登錄憑據)對我來說是一個問題的一部分:在我的情況下,這使我成功檢查了一個mercurial存儲庫(使用ssh協議),我可以使用“本地系統帳戶”時不要這樣做。

但是,在構建部分中運行命令行腳本或從jenkins的“執行shell”腳本運行相同的腳本之間,我仍然有不同的行為。 在我的例子中,我編譯了一個Python擴展。 在Jenkins,我無法導入擴展(我沒有看到任何錯誤,但執行只是停止,所以我懷疑它崩潰)。

如果我卸載服務並將從屬代理作為Java Web Start運行,我會得到相同的行為。 這對我來說是一個臨時修復,但這意味着當我重新啟動Windows構建機器時,我必須手動重新啟動Java Web Start應用程序。

所以 - 至少在我的情況下 - 很明顯這是一個憑證問題。

憑證使用文檔: https//wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI

我用CIFS插件解決了我的問題。

面對類似的問題,找到了兩種解決方法。

類型1:告訴詹金斯關於映射驅動器。 1.轉到 - >管理Jenkins - >腳本控制台(Groovy腳本)。 2.跑到命令之下

 def mapdrive = "net use Y: \\\\copy_nework_address"
 mapdrive.execute();
 println "net use".execute().getText()

鍵入:2 1.Goto - > cmd - >運行“net use”以了解網絡地址

xcopy "C:\Program Files (x86)\Jenkins\workspace\trunk\Projects\results\results\obj\Debug\Package\PackageTmp" "Copy_Network_Address\Extraction_Zone\Jenkins\" /E

結論: - 我更喜歡第二種類型,因為每次重啟后我應該運行Groovy Script。

暫無
暫無

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

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