【问题标题】:Is there a way for one ant script to check if another is already running?有没有办法让一个 ant 脚本检查另一个是否已经在运行?
【发布时间】:2015-05-26 19:04:37
【问题描述】:

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

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

我想防止这种情况再次发生,我认为最简单的解决方案是让每个构建脚本通过检查另一个当前没有运行来启动。

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

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

【问题讨论】:

    标签: ant build-process


    【解决方案1】:

    如果这些是单独的 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 构建系统,但我承认这是一项相当大量的工作(并且会引入一系列完全不同的未来问题。)

    【讨论】:

    • 我最终在我们用来启动 ant 的 Windows 批处理文件中放置了一个锁定文件检查/创建/删除,但原理完全相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 2016-12-06
    相关资源
    最近更新 更多