From f2f95888b4d6eab9c0bca056208b3c042e41b1f0 Mon Sep 17 00:00:00 2001 From: Olev Kartau Date: Sat, 21 Feb 2015 16:31:15 +0200 Subject: [PATCH] Added logs-collector script This script copies,compresses Jenkins jobs logs aside to JENKINS_HOME/logs-collected/ in order to save them from Jenkins logs rotation which does not scale well Change-Id: I0b46105db0ecb03e306512efde0b4f9da307683d --- logs-collector.sh | 43 ++++++++++++++++++++++++++++++++++++++++++ packaging/jenkins-scripts.spec | 3 ++- 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100755 logs-collector.sh diff --git a/logs-collector.sh b/logs-collector.sh new file mode 100755 index 0000000..7f89560 --- /dev/null +++ b/logs-collector.sh @@ -0,0 +1,43 @@ +#!/bin/sh -eu +# copy jenkins job logs to long-term storage to survive jenkins logs deletion +# +jhome=/var/lib/jenkins +collectdir=$jhome/logs-collected +min_age='-mtime +1' +max_age_def='-mtime -3' +keep_age='-ctime +365' + +# 1st run handles all older than min_age, +# next runs look at files min_age...max_age_def old +max_age="" +[ -d $collectdir ] && max_age=$max_age_def +mkdir -p $collectdir +# list logs older than 24h, to avoid new live files +logfiles=`find $jhome/jobs -type f $min_age $max_age -name log` +for logfile in $logfiles; do + jobdir=`echo $logfile | sed 's/\/log$//'` + shortname=`echo $jobdir | sed 's/^\/var\/lib\/jenkins\/jobs\///; s/configurations\/axis-label\///; s/\/builds\//\//; s/\//-/g'` + # already existing stored log happens often, so check it first + [ -f $collectdir/$shortname.*.log.xz ] && continue + # job dir gone away (by jenkins) may happen, but not often, so check it next + [ ! -d $jobdir ] && continue + links=`find $jobdir/../ -type l $min_age $max_age -name '[0-9]*' | sort -rn` + jobid=`basename $jobdir` + jobnumber="" + for ln in $links; do + [ ! -L $ln ] && continue + ltarget=`readlink $ln` + if [ X$ltarget = X$jobid ]; then + jobnumber=`basename $ln` + break + fi + done + if [ X$jobnumber != "X" ]; then + xz -v -c $logfile > $collectdir/$shortname.$jobnumber.log.xz + fi +done + +# delete old compressed files. +# note: timelimit here should be larger than range of collector, +# otherwise collector copies same logfiles again. +find $collectdir -type f -name '*.log.xz' $keep_age -exec rm -f {} \; diff --git a/packaging/jenkins-scripts.spec b/packaging/jenkins-scripts.spec index 4a8e853..4fff7d6 100644 --- a/packaging/jenkins-scripts.spec +++ b/packaging/jenkins-scripts.spec @@ -66,7 +66,7 @@ Isolated job_submitobs to avoid package installation conflicts %install install -d %{buildroot}%{destdir} -cp -r job_*.py dir-purge-tool.sh common obs_requests templates %{buildroot}%{destdir}/ +cp -r job_*.py dir-purge-tool.sh logs-collector.sh common obs_requests templates %{buildroot}%{destdir}/ %post common if [ ! -d /var/lib/jenkins/userContent ]; then @@ -96,6 +96,7 @@ fi %{destdir}/obs_requests %{destdir}/common/tempbuildpkg.py %{destdir}/dir-purge-tool.sh +%{destdir}/logs-collector.sh %files common %defattr(-,jenkins,jenkins) -- 2.7.4