Jenkins:当日志输出被不断覆盖时,如何查看日志输出的进度?

时间:2016-11-29 23:02:44

标签: jenkins

我在Jenkins中运行了很长时间(几个小时)的Rsync备份任务 Rsync将进度输出打印到日志。在查看终端时 - 最后一行是“令人耳目一新”,即它不断地打印在自己身上。但是当Jenkins运行任务时 - 它没有显示该信息。

这是我在Jenkins中看到的,当任务正在运行时:

enter image description here

这就是我看到的,在它完成之后(这就是我想要看到的,在它运行时):

sending incremental file list
35-openMeet-flat.vmdk

        131,072   0%    0.00kB/s    0:00:00  
      9,437,184   0%    8.88MB/s    1:38:26  
     21,757,952   0%   10.30MB/s    1:24:49  
     32,899,072   0%   10.40MB/s    1:23:58  
     44,302,336   0%   10.49MB/s    1:23:12  
     55,443,456   0%   10.92MB/s    1:19:55  
     66,191,360   0%   10.56MB/s    1:22:40  
     78,118,912   0%   10.73MB/s    1:21:17  

如何配置Jenkins在任务运行时打印完整输出

P.S。我很高兴,即使我需要找到并观看一些Jenkins日志文件。但目前我找不到任何东西。 例如,我试过这个:

slavik@ubhome:/var/lib/jenkins/jobs/backup ESXI VM/builds/34$ tail log
sending incremental file list
35-openMeet.vmdk
            532 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=0/1)

sent 434 bytes  received 41 bytes  190.00 bytes/sec
total size is 532  speedup is 1.12
Comparing file sizes...
Sizes are different, calculating delta checksums, can take a while, time for a coffee...
sending incremental file list
35-openMeet-flat.vmdk
slavik@ubhome:/var/lib/jenkins/jobs/backup ESXI VM/builds/34$

但正如您所看到的,它不会显示带有进度数据的最后一行。看起来它保存在RAM中,并且在它真的是新行之前不会写入磁盘。

1 个答案:

答案 0 :(得分:3)

确实这是一年多了,但我偶然发现了这个问题,希望找到答案。如果做不到这一点,我设法找到了一个解决方案,并认为我将分享其余的互联网。

你想要做的是“unbuffer”rsync命令。有几个项目可以“解除”事情(unbufferedexpectunbuffer命令),但这些对我来说并不适合。 unbuffered很接近,但在我的日志中抛出了一堆我不想要的换行符(在使用-c标志后,无法避免重复的行)。

最终工作的是this:使用链接中找到的标记通过stbuf管理我的rsync命令。现在我的jenkins控制台很漂亮,并且跟上rsync的进度:

rsync -avz --progress <source> <destination> | stdbuf -oL tr '\r' '\n'