有没有一种方法可以让一个 ant 脚本检查另一个 ant 脚本是否已经 运行?

Is there a way for one ant script to check if another is already running?

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

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

我想防止这种情况再次发生,在我看来最简单的解决方案是让每个构建脚本开始时检查另一个当前不是 运行ning。

ant 中有没有办法直接检查另一只蚂蚁 instance/script 当前是否正在 运行ning?

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

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

也许 tempfile 任务可以用于此?

实际上,基于目录的某种信号量可能更好,因为临时文件确实是一个唯一的临时文件。您的脚本做的第一件事是使用 mkdir 创建一个共享资源目录名称,但它仅在目录 存在时才执行此操作。

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

这个想法是目录的内容和名称没有意义——它只是作为一个"IPC"协作锁定机制。

这不是特别优雅,但我认为您唯一的其他选择是设置一个构建服务器来处理基于各种触发器的计划和连续构建。很多人使用的一个是 Jenkins(或者改名了吗?)

[更新]

也许 Do I have a way to check the existence of a directory in Ant (not a file)? 可以解决问题?

老实说,这种方法可能在短期内有效,但它只是转移了问题。您无需重置单元测试结果,而是手动删除锁定文件以使构建再次运行。我的建议是设置一个 CI 构建系统,但我认识到这是一项相当大的工作(并且引入了一系列完全不同的未来问题。)