Java 有没有办法让一个没有';在詹金斯的X分钟内什么都不记录?

Java 有没有办法让一个没有';在詹金斯的X分钟内什么都不记录?,java,jenkins,groovy,jenkins-pipeline,Java,Jenkins,Groovy,Jenkins Pipeline,我有一个Jenkins管道,它并行运行多个阶段 我正在寻找一种方法来分别记录每个阶段(有点像蓝海),并监控阶段日志,看看它是否卡住了。有时我们会遇到脚本卡住,或者其他正在运行的java/groovy代码卡住而不一定抛出异常 所以我需要失败的阶段,如果它没有记录的东西,如10分钟。我试图找到是否有一种方法可以通过编程方式实时监视控制台日志,但找不到任何方法 我想让每个阶段也登录到一个文件,并检查该文件的“lastModifiedDate”。所以我去做了一个像这样的tee: stage('Test'

我有一个Jenkins管道,它并行运行多个阶段

我正在寻找一种方法来分别记录每个阶段(有点像蓝海),并监控阶段日志,看看它是否卡住了。有时我们会遇到脚本卡住,或者其他正在运行的java/groovy代码卡住而不一定抛出异常

所以我需要失败的阶段,如果它没有记录的东西,如10分钟。我试图找到是否有一种方法可以通过编程方式实时监视控制台日志,但找不到任何方法

我想让每个阶段也登录到一个文件,并检查该文件的“lastModifiedDate”。所以我去做了一个像这样的
tee

stage('Test') {
  steps {
    script {
      tee ("${WORKSPACE}/logs/${STAGE_NAME}.log"){
        echo "TEST"
        sleep(15)
        echo "Done"
      }
    }
  }
}
这将工作并创建一个日志文件。 现在,我想轮询该目录并检查文件是否已被修改,否则将失败。 为此,我使用了一些基于Java的Watch服务的Groovy代码(这里有更深入的文档):

在我看来,它似乎无法通过Jenkins定制Groovy解释器实现。也许我做错了什么


那么,有没有更好的解决方案来实现这一点,如果有的话?

您是否尝试过使用参数
activity:true
执行
超时
步骤?虽然不是完美的,但它与我所寻找的类似。我不知道我怎么会错过它。它有时会失败,但我必须进行更多的测试。我也遇到了这个问题:。您能否将您的评论作为答案发布,以便我可以接受?您是否尝试过使用参数
activity:true
执行
timeout
步骤?尽管不是完美的,但它与我所寻找的类似。我不知道我怎么会错过它。它有时会失败,但我必须进行更多的测试。我也遇到了这个问题:。你能把你的评论作为答案贴出来让我接受吗?
private void watchDirectory(String directoryToWatch) {
    Path path = Paths.get(directoryToWatch)
    WatchService watchService = FileSystems.getDefault().newWatchService()
    boolean poll = true
    boolean failed = false
    long lastModified = System.currentTimeMillis()
    while (poll) {
        WatchKey key = path.register(watchService, StandardWatchEventKinds.ENTRY_MODIFY)
        for (WatchEvent<?> event : key.pollEvents()) {
            Path changed = (Path) event.context()
            if (changed.endsWith("${STAGE_NAME}.log")) {
                println("My file has changed")
                lastModified = System.currentTimeMillis()
            }
        }

        if (System.currentTimeMillis() - lastModified > 20000) {
            println("20 seconds")
            watchService.close()
            failed = true
            break
        }
        poll = key.reset();
    }

    if (failed) {
        catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {
            sh "exit 1"
        }
    }
}
java.nio.file.NoSuchFileException: /data/jenkins/workspace/build_name/logs
  at sun.nio.fs.UnixException.translateToIOException(UnixException.java:86)
  at sun.nio.fs.UnixException.asIOException(UnixException.java:111)
  at sun.nio.fs.LinuxWatchService$Poller.implRegister(LinuxWatchService.java:246)
  at sun.nio.fs.AbstractPoller.processRequests(AbstractPoller.java:260)
  at sun.nio.fs.LinuxWatchService$Poller.run(LinuxWatchService.java:329)
  at java.lang.Thread.run(Thread.java:745)