[英]Windows batch (cmd.exe) command line parameters and string manipulation
[英]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命令! 希望它有所幫助。
容易修復大多數事情。
:)
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.