我有一个蚂蚁脚本,如下所示:
<project name="nightly_build" default="main" basedir="checkout">
<target name="init">
<exec executable="C:/Work/Searchversion.exe"/>
<property file="initial.properties"/>
<property file="C:/Work/lastestbuild.properties"/>
<tstamp>
<format property="suffix" pattern="yyyyMMddHHmmss"/>
</tstamp>
</target>
<target name="main" depends="init">
<exec executable="C:/Program Files/True Blue Software/SnapshotCM/wco.exe">
<arg line='-h sinsscm01.sin.ds.net -S"/mobile/6.70_Extensions/6.70.102/ANT_SASE_RELEASE_${Version_Number}" /'/>
</exec>
</target>
</project>
我创建了上面的脚本来复制命令:wco -h sinsscm01.sin.ds.net -S"/mobile/6.70_Extensions/6.70.102/ANT_SASE_RELEASE_6.70.102.014" /
和6.70.102.014
位于latestbuild.properties
文件中,格式为:
Version_Number = 6.70.102.014
当我执行latestbuild.properties
C:/Work/Searchversion.exe
文件
但是当我使用cruisecontrol在我的日志文件中执行这个ant脚本时,
[Thread-24] INFO ScriptRunner - [exec] Cannot open snapshot 'sinsscm01.sin.ds.jdsu.net:/mobile/6.70_Extensions/6.70.102/ANT_SASE_RELEASE_${Version_Number}': No such snapshot
其中${Version_Number}
应该是6.70.102.014
我如何解决这个问题?
编辑1:
经过反复试验并用内置属性$ {ant.version}代替,我意识到我的属性文件可以在这里正确加载。任何人都可以指出我的错误?我没有看到任何错误
编辑2:
只是附加信息......这实际上是cruisecontrol的委托蚂蚁脚本(用于执行夜间构建)。这是我每分钟构建的config.xml文件:
<cruisecontrol>
<project name="dms" buildafterfailed="true">
<listeners>
<currentbuildstatuslistener file = "logs/dms/status.txt"/>
</listeners>
<bootstrappers>
</bootstrappers>
<modificationset quietperiod="60">
<alwaysbuild/>
</modificationset>
<schedule interval="60">
<ant buildfile="nightly_build.xml" target="main"/>
</schedule>
<log dir="logs/dms">
<merge dir="checkout/dms/build/test-results" />
</log>
<publishers>
</publishers>
</project>
</cruisecontrol>
应该在config.xml中加载属性文件吗?
答案 0 :(得分:0)
您可以在init目标中添加断言,即所需的属性文件存在并且定义了属性。例如:
<property name="version.file" value="C:/Work/lastestbuild.properties"/>
<available file="${version.file}" property="version.file.available"/>
<fail unless="version.file.available" message="file [${version.file}] is not available"/>
<property file="${version.file}"/>
<fail unless="version" message="property [version] is not defined"/>
<echo message="version: ${version}"/>
我认为这会帮助您发现该文件不存在。
我看了一下你关于这个脚本的other question。在将版本号写入文件的代码中,使用文件名latestbuild.properties
:
TextWriter latest = new StreamWriter("C:\\Work\\latestbuild.properties");
在Ant脚本中,您要加载不同的文件名lastestbuild.properties
。
除非你从那时起修复它,否则这将是你的问题。 (如果您修改了外部脚本以将文件名作为参数,并将文件名定义为Ant属性 - 如上面的示例所示 - 它将帮助您避免此类问题。)
关于您在继续使用Ant之前需要等待外部脚本的发现,请查看Sleep任务。
答案 1 :(得分:0)
尝试将wco.exe
的参数分解为单独的子元素,如下所示:
<exec executable="C:/Program Files/True Blue Software/SnapshotCM/wco.exe">
<arg value="-h" />
<arg value="sinsscm01.sin.ds.net" />
<arg value="-S" />
<arg value="/mobile/6.70_Extensions/6.70.102/ANT_SASE_RELEASE_${Version_Number}" />
<arg value="/" />
</exec>
我认为ant不会扩展${Version_Number}
,因为它位于您发布的版本中的“...”中。
如<exec>
<arg line=...>
所述,您应该避免使用{{1}}表单。