我有一个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在一个从机上构建这个任务,当任务构建完成时,我希望Jenkins调用将启动这个应用程序的ant脚本,然后我希望应用程序实际使鼠标在Jenkins从机上移动。目前,Jenkins报告构建成功,但似乎什么都没有发生。
更新
当我使用failonerror="true"
运行exec时,没有错误打印到Jenkins日志中。Jenkins只是说了mytarget:,就好像它即将开始打印该目标的日志信息,然后什么都没发生,构建成功完成,从服务器上什么都没有发生(应用程序没有启动)。
更新2
我刚刚有一个有趣的发现。我用/Applications/Dictionary.app
替换了${basedir}/myApp.app
行,当我用Jenkins运行它时,它打开了字典一小会儿,然后立即关闭了它。我的应用程序也会出现这种情况吗?我的剧本在开头有一个延迟,所以它会在这段时间结束吗?
open
命令只是启动应用程序,并不关心其生命周期。它正在启动应用程序,并将正在运行的线程返回给Ant。然后Ant终止exec
任务,所以终止目标,所以终止构建,所以终止Ant本身。
我认为解决方案是将-W
选项添加到open
中,这样它就"等待它打开的(或已经打开的)应用程序退出"。
<exec executable="open">
<arg value="-W" />
<arg value="${basedir}/myApp.app" />
</exec>