簡體   English   中英

通過 jenkins 執行批處理命令不提取文件,盡管它在作為 bat 文件運行時提取

[英]batch command execution through jenkins not extracting files though it extracts when run as bat file

我在 Jenkins 中編寫了以下批處理腳本。 當我在同一文件夾的 Jenkins 服務器工作區中將它作為 bat 文件運行時,它運行時沒有任何問題。 但是當我使用“執行 Windows 批處理命令”通過 jenkins 運行它時,它沒有提取。 它打印帶有相關路徑的“about to copy from”行,並且它只是從那里繼續執行。 控制台輸出中沒有打印任何內容,也沒有提取任何內容。 下面是腳本。

echo %CD%
FOR /D %%p IN ("%CD%\Setups\*") DO rmdir "%%p" /s /q

 call mvn org.apache.maven.plugins:maven-dependency-plugin:2.4:get -DrepoUrl=http://10.101.2.23:8081/nexus/content/repositories/releases/ -Dartifact=test:update-service:1.0.3 -Ddest=Setups/Services/update-service.jar
call mvn org.apache.maven.plugins:maven-dependency-plugin:2.4:get -DrepoUrl=http://10.101.2.23:8081/nexus/content/repositories/releases/ -Dartifact=test:installer-prerequisites:1.0.0 -Ddest=Setups/PreRequisites/installer-prerequisites.zip -Dpackaging=zip

echo came after the downloads

for /r %%i in (*.zip) do (
  echo about to copy from %%~dpi to %%~fi
Call :UnZipFile "%%~dpi" "%%~fi"
echo called unzip on %%i
del /S /Q "%%~fi"
)

exit /b

:UnZipFile <ExtractTo> <newzipfile>
    setlocal
    set vbs="%temp%\_.vbs"
    if exist "%vbs%" del /f /q "%vbs%"
     >"%vbs%" echo Set fso = CreateObject("Scripting.FileSystemObject")
    >>"%vbs%" echo If NOT fso.FolderExists("%~1") Then
    >>"%vbs%" echo fso.CreateFolder("%~1")
    >>"%vbs%" echo End If
    >>"%vbs%" echo set objShell = CreateObject("Shell.Application")
    >>"%vbs%" echo set FilesInZip=objShell.NameSpace("%~2").items
    >>"%vbs%" echo objShell.NameSpace("%~1").CopyHere(FilesInZip)
    >>"%vbs%" echo Set fso = Nothing
    >>"%vbs%" echo Set objShell = Nothing
    cscript //nologo "%vbs%"
    if exist "%vbs%" del /f /q "%vbs%"
    endlocal

這在作為 bat 文件運行時工作正常。 請指教。

以下是詹金斯工作區路徑:

C:\Program Files (x86)\Jenkins\jobs\Installer\workspace\Setups

檢查您的 zip 文件的權限,並確保它可以被運行 jenkins 的用戶讀取。

每次都必須清潔工作區。 如果它不是代碼存儲庫,您應該使用 jenkins workspace cleaner 插件。

將您的腳本放入批處理文件中。 並像這樣從詹金斯“執行Windows批處理命令”運行它。

call "C:\Scripts\mycustombatch.bat" myparameter1 "myparameter2"

你的批處理腳本文件看起來像這樣。 %1 是第一個參數。 您應該修改並添加更多參數..

xcopy %1 %2 /y

要么

您應該使用免費的解壓程序,例如 7zip 工具。 安裝后,您應該直接使用以下命令。

"C:\Program Files\7-Zip\7z.exe" e "C:\myzipfile.7z" -o"C:\ExtractedFolder" *.* -r -y

或使用批處理文件進行參數化並從 jenkins 調用 bat 文件。

call "C:\Scripts\mycustombatch.bat" "%WORKSPACE%\myzipfile.7z" "C:\ExtractedFolder"

mycustombatch.bat

cd "C:\Program Files\7-Zip"
7z e %1 -o%2 *.* -r -y

7z.exe使用示例:

http://www.dotnetperls.com/7-zip-examples

我必須在子例程結束時指定 GOTO:eof。 那是,

:UnZipFile <ExtractTo> <newzipfile>
setlocal
set vbs="%temp%\_.vbs"
if exist "%vbs%" del /f /q "%vbs%"
 >"%vbs%" echo Set fso = CreateObject("Scripting.FileSystemObject")
>>"%vbs%" echo If NOT fso.FolderExists("%~1") Then
>>"%vbs%" echo fso.CreateFolder("%~1")
>>"%vbs%" echo End If
>>"%vbs%" echo set objShell = CreateObject("Shell.Application")
>>"%vbs%" echo set FilesInZip=objShell.NameSpace("%~2").items
>>"%vbs%" echo objShell.NameSpace("%~1").CopyHere(FilesInZip)
>>"%vbs%" echo Set fso = Nothing
>>"%vbs%" echo Set objShell = Nothing
cscript //nologo "%vbs%"
if exist "%vbs%" del /f /q "%vbs%"
GOTO:eof
endlocal

否則,子例程不會返回到調用它的主要部分。

暫無
暫無

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

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