通过jenkins执行批处理命令,虽然它在作为bat文件运行时提取文件,但不提取文件



我已经用Jenkins编写了下面的批处理脚本。当我在Jenkins服务器工作区的同一个文件夹中将其作为bat文件运行时,它运行时没有任何问题。但当我使用"执行Windows批处理命令"通过jenkins运行它时,它并没有提取。它打印带有相关路径的行"即将从中复制",并从那里继续执行。控制台输出中未打印任何内容,也未提取任何内容。下面是脚本。

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文件运行时,这可以很好地工作。请提供建议。

下面是jenkins的工作空间路径:

C:Program Files (x86)JenkinsjobsInstallerworkspaceSetups

检查zip文件的权限,确保运行jenkins的用户可读。

每次都必须清理工作区。如果它不是一个代码存储库,你应该使用一个jenkins工作空间清理插件。

将脚本放入批处理文件中。并像这样从jenkins的"执行Windows批处理命令"中运行它。

call "C:Scriptsmycustombatch.bat" myparameter1 "myparameter2"

您的批处理脚本文件如下所示。%1是第一个参数。您应该修改并添加更多参数。。

xcopy %1 %2 /y

您应该使用像7zip工具这样的免费提取程序。安装后,应直接使用以下命令。

"C:Program Files7-Zip7z.exe" e "C:myzipfile.7z" -o"C:ExtractedFolder" *.* -r -y

或者使用批处理文件进行参数化,并从jenkins调用bat文件。

call "C:Scriptsmycustombatch.bat" "%WORKSPACE%myzipfile.7z" "C:ExtractedFolder"

mycustombatch.bat

cd "C:Program Files7-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

如果没有这一点,子程序就不会返回到调用它的主要部分。

最新更新