我有一个build.xml文件,最后包含以下行:
<ant dir="${basedir}/subfolder" target="mytarget" />
然后在子文件夹中,我有另一个build.xml文件,其中包含以下内容:
<target name="mytarget">
<exec executable="open">
<arg value="${basedir}/myApp.app" />
</exec>
</target>
myApp.app
应用程序旨在在屏幕上可见,而不是在后台执行。这是一款在Automator中设计的应用程序,它具有鼠标移动和点击功能。我设置Jenkins在slave上构建这个任务,当构建任务时我希望Jenkins调用ant脚本来启动这个应用程序,然后我希望应用程序实际上让鼠标在Jenkins slave上移动。现在Jenkins报告了一个成功的构建,但似乎没有发生任何事情。
更新
当我用failonerror="true"
运行exec时,没有错误打印到Jenkins日志。 Jenkins只是说 mytarget:好像它即将开始打印该目标的日志信息,然后没有任何反应,构建成功完成,从站上没有任何事情发生(应用程序未启动)
更新2
我刚才有一个有趣的发现。我用${basedir}/myApp.app
替换了行/Applications/Dictionary.app
,当我用Jenkins运行它时,它打开字典一小秒钟,然后立即关闭它。我的应用程序是否会发生这种情况而没有任何显示?我的脚本在开始时有延迟,那么它可能会在那段时间内关闭吗?
答案 0 :(得分:0)
open
命令只是启动应用程序,但不关心其生命周期。它正在启动应用程序并将正在运行的线程返回给Ant。然后Ant终止exec
任务,所以目标,所以构建,所以Ant本身。
我认为解决方案是将-W
选项添加到open
,以便它“等待它打开的应用程序(或已经打开的应用程序)退出”。
<exec executable="open">
<arg value="-W" />
<arg value="${basedir}/myApp.app" />
</exec>