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