有没有办法让一个蚂蚁脚本检查另一个是否已经在运行?

时间:2015-05-26 19:04:38

标签: ant build-process

我们有几个自动构建脚本,其中一些脚本每2小时自动运行一次,其中一些脚本只能手动运行。

如果构建脚本是手动启动而另一个脚本已在运行,则可能会导致...出现问题。例如将未经测试的分支合并到生产分支中。

我想再次阻止这种情况发生,我想到的最简单的解决方案是让每个构建脚本都先检查另一个构建脚本当前是否正在运行。

在ant中有没有办法直接检查当前是否正在运行另一个ant实例/脚本?

如果没有,添加此类支票的最简单方法是什么?我的第一个想法是在开始时创建并在构建结束时删除的文件。我更喜欢一种很好地处理用户取消构建的方法,但这不是必需的。如果构建成功并且构建失败(但没有被用户杀死),它需要工作。

1 个答案:

答案 0 :(得分:1)

如果这些是单独的Ant进程,那么我认为唯一的解决方案是定义一个每个Ant进程在继续之前需要获取的某种类型的锁文件。

也许可以使用tempfile任务吗?

实际上,基于目录的一种信号量可能更好,因为tempfile确实是一个唯一的临时文件。您的脚本所做的第一件事是使用mkdir来创建共享资源目录名称,但只有当目录时才会这样做。

退出后,它会在此共享资源名称上调用delete

这个想法是目录的内容和名称毫无意义 - 它只是作为一个" IPC"合作锁定机制。

这并不是特别优雅,但我认为您唯一的另一个选择是设置一个构建服务器,根据各种触发器处理计划和连续构建。很多人使用的是Jenkins(或者它已被重命名?)

[更新]

也许Do I have a way to check the existence of a directory in Ant (not a file)?可以做到这一点?

老实说,这种方法可能会在短期内发挥作用,但它只会解决问题。您不必重置单元测试结果,而是手动删除锁定文件以使构建再次运行。我的建议是建立一个CI构建系统,但我认识到这是一项相当多的工作(并引入了一整套不同的未来问题。)