Svn 如果从Jenkins CI作业执行,则批处理返回不同的结果
我正在从ApacheAnt build.xml执行批处理文件,运行于Jenkins CI作业(Win 7 x64 Ent SP1) 批处理文件:Svn 如果从Jenkins CI作业执行,则批处理返回不同的结果,svn,batch-file,Svn,Batch File,我正在从ApacheAnt build.xml执行批处理文件,运行于Jenkins CI作业(Win 7 x64 Ent SP1) 批处理文件: @Echo Off svn info | findstr /C:"Relative URL:" > temp1.txt set /p str=<temp1.txt echo !str! @ > temp1.txt svn info | findstr /C:"Revision:" > temp2.txt copy *.txt t
@Echo Off
svn info | findstr /C:"Relative URL:" > temp1.txt
set /p str=<temp1.txt
echo !str! @ > temp1.txt
svn info | findstr /C:"Revision:" > temp2.txt
copy *.txt temp3.txt
setLocal EnableDelayedExpansion
for /f "tokens=* delims= " %%a in (temp3.txt) do (
set s=!s!%%a
)
echo !s! >> BrandingText.PROPERTIES
temp3.txt:
!str! @
Revision: 133708
temp2.txt
Revision: 133708
temp1.txt
!str! @
另一方面,如果我在本地运行它(从我的机器的CMD调用执行批处理的ant target),我会得到正确的结果。。。为什么?如何在我的机器和buildserver(Jenkins CI)作业中修复批处理以获得相同和正确的结果
我不是日常的Windows外壳代码编写者,因此任何帮助都将不胜感激。哦,再加上结尾的换行符
修订:
也是他妈的讨厌的一个。。。摆脱它会很好:)
也许,这应该管用
如果延迟扩展已关闭,!str
(使用有效内容定义的变量),返回!str代码>。没有延迟扩展,因此没有翻译代码>变量
但是,echo%str%@>temp1.txt
应该可以工作
已编辑-用于讨厌的新行字符
<temp2.txt set /p t2=
<nul set /p t2=%t2%> temp2.txt
我认为让构建脚本意识到版本控制是一个糟糕的想法-这些问题应该分开考虑
话虽如此,如果您只是将svreversion
的输出设置为一个变量,甚至将其写入一个文件,您会过得更好。此注释是否可以作为此行为的解释:?我想我试过使用%%,但是它甚至在我的机器上都不起作用……确切地说,你想从哪里删除讨厌的新行字符?从temp2.txt文件中:)请参阅更新的答案。希望这对你有用。是的。。。你这是在给自己制造麻烦。任何地方的构建都必须在本地工作,理想情况下,CI构建就是这样(如果不是这样的话,那么构建就糟透了)。为什么在本地版本上需要任何svn修订信息?这是不相关的-因为将有本地修改无论如何。谢谢。不,它不起作用;我现在得到了空的temp2.txt。再次感谢您的努力和时间。:)我们也这样做,但在一些罕见的情况下。。。将这些值分布在构建基础架构中很好。:)其目的不是依赖,甚至不是知晓。。如果有任何值,则使用它;如果没有,则build.xml不关心。就这么简单。
@echo off
setlocal enableextensions enabledelayedexpansion
rem and here starts the code
....
<temp2.txt set /p t2=
<nul set /p t2=%t2%> temp2.txt