问题
我有一个从预构建事件中调用的批处理文件。当Jenkins正在构建解决方案时,它会失败。在命令行中从MSBuild或Visual Studio
构建解决方案时,它工作正常。
我的问题是,什么会导致这种行为?
细节
在我的解决方案(.Net 4.5 和 C++ 项目)中,我有一个从项目的 Pre-Build 事件之一调用的批处理文件。
它工作正常,除非我试图通过 Jenkins(CI 服务器)构建解决方案。错误是:
命令 ""C:\Jenkins\apps\jenkins\jenkins_home\jobs\Builld_SMW2\workspace\Autosync\CopySymAlignFiles.bat" "C:\Jenkins\apps\jenkins\jenkins_home\jobs\Builld_SMW2\workspace\" "C:\ Jenkins\apps\jenkins\jenkins_home\jobs\Builld_SMW2\workspace\Autosync\" "Debug"" 退出并显示代码 1。
从错误报告中,我复制了用于尝试构建解决方案的命令:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe /p:Platform=x86 /p:configuration=Debug /t:Rebuild /verbosity:quiet /p:WarningLevel=0 /p:Platform=x86 /p:configuration=Debug /t:Rebuild /verbosity:quiet /p:WarningLevel=0 ..\SMW2_Analysis.sln
(我知道参数被传递了两次,我不知道詹金斯为什么这样做,但这不是问题......)
如果我从命令行运行此命令,则一旦触发构建事件,批处理文件就可以正常工作。
CopySymAlignFiles.bat 的内容是:
回声偏移
设置解决方案目录=%1
设置项目目录=%2
设置配置=%3REM 删除引号
set solutionDir=%solutionDir:"=%
set projectDir=%projectDir:"=%
set configuration=%configuration:"=%REM 字符串是否有斜杠?如果是这样删除它
IF %solutionDir:~-1%==\ SET solutionDir=%solutionDir:~0,-1%
IF %projectDir:~-1%==\ SET projectDir=%projectDir:~0,-1%
IF %configuration:~-1%==\ SET configuration=%configuration:~0,-1%REM 这只是为了方便调试
Echo 解决方案目录是:"%solutionDir%"
Echo 项目目录是:"%projectDir%"
Echo 配置目录是:"%configuration%"
Echo 当前目录是:"%CD%"
Echo 批处理文件在“%~dp0”处执行REM 复制 sym_align 文件
copy /Y "%solutionDir%\SymAlignGlue\sym_align.dll" "%projectDir%"
copy /Y "%solutionDir%\SymAlignGlue\sym_align.ctf" "%projectDir%"set isPV=%configuration%=="PV Release"
IF %isPV% copy /Y "%solutionDir%\SymAlignGlue\Release\SymAlignGlue.dll" "%projectDir%"
IF NOT %isPV% copy /Y "%solutionDir%\ SymAlignGlue\%configuration%\SymAlignGlue.dll" "%projectDir%"REM 结果...
IF %ERRORLEVEL% EQU 0 (
REM 成功
回显复制 SymAlign 文件。
退出 /b 0
)
IF NOT %ERRORLEVEL% EQU 0 (
REM 错误
回显 复制 SymAlign 文件时发现错误。错误级别为 %ERRORLEVEL %
退出 /b %ERRORLEVEL%
)
一些附加信息:
- 我将 Jenkins 作为服务运行,并且以管理员身份登录服务。
有没有人有想法怎么会发生这种情况?