詹金斯:如何在日志输出中看到进度,当它不断被覆盖时?

Sla*_*vik 5 jenkins

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

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

在此处输入图片说明

这是我在完成后看到的(这就是我想在运行时实时看到的):

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  
Run Code Online (Sandbox Code Playgroud)

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

PS 我会很高兴,即使我需要查找并查看一些 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$
Run Code Online (Sandbox Code Playgroud)

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

inv*_*lek 6

当然,这是一年多之后,但我偶然发现了这个问题,希望能找到答案。失败了,我设法找到了解决方案,并认为我会为互联网的其余部分分享。

您想要做的是“取消缓冲” rsync 命令。有几个项目可以“解除缓冲”(unbufferedexpectunbuffer命令),但这些对我来说不太合适。Unbuffered 很接近,但在我的日志中扔了一堆我不想要的换行符(在使用了-c防止到处重复行的标志之后)。

最终的工作是这样的:通过 stbuf 将我的 rsync 命令与在链接中找到的标志进行管道传输。现在我的 jenkins 控制台很好很漂亮并且跟上 rsync 的进度:

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