#!/bin/bash
set +e # Do not affect the build result if some part of archiving fails.
# Print out git status at the end of the build before we archive if $WORKSPACE
# is a git repo.
if [ -d "$WORKSPACE/.git" ]; then
echo ""
echo "----------> Git Status Report"
git status
fi
echo ""
echo "----------> Archiving build to logs server"
# Configure wget to not print download status when we download logs or when
# Jenkins is installing Maven (To be clear this is the Jenkins Maven plugin
# using a shell script itself that we are unable to modify directly to affect
# wget).
echo "verbose=off" > ~/.wgetrc
ARCHIVES_DIR="$JENKINS_HOSTNAME/$JOB_NAME/$BUILD_NUMBER"
[ "$LOGS_SERVER" ] || LOGS_SERVER="https://logs.onap.org"
[ "$LOGS_REPO_URL" ] || LOGS_REPO_URL="https://nexus.onap.org/service/local/repositories/logs"
echo "Build logs: $LOGS_SERVER/$SILO/$ARCHIVES_DIR"
mkdir .archives
cd .archives/ || exit 1
cat > deploy-archives.xml <
4.0.0
logs
logs
1.0.0
pom
org.apache.maven.plugins
maven-deploy-plugin
2.8.2
true
org.sonatype.plugins
maven-upload-plugin
0.0.1
publish-site
deploy
upload-file
onap-log-archives
$LOGS_REPO_URL/content-compressed
archives.zip
$SILO
EOF
mkdir -p "$ARCHIVES_DIR"
mkdir -p "$WORKSPACE/archives"
if [ ! -z "$ARCHIVE_ARTIFACTS" ]; then
pushd "$WORKSPACE"
shopt -s globstar # Enable globstar to copy archives
for f in $ARCHIVE_ARTIFACTS; do
[[ -e $f ]] || continue # handle the case of no files to archive
echo "Archiving $f" >> "$WORKSPACE/.archives/$ARCHIVES_DIR/_archives.log"
dir=$(dirname "$f")
mkdir -p "$WORKSPACE/archives/$dir"
mv "$f" "$WORKSPACE/archives/$f"
done
shopt -u globstar # Disable globstar once archives are copied
popd
fi
# Ignore logging if archives doesn't exist
mv "$WORKSPACE/archives/" "$ARCHIVES_DIR" > /dev/null 2>&1
touch "$ARCHIVES_DIR/_build-details.txt"
echo "build-url: ${BUILD_URL}" >> "$ARCHIVES_DIR/_build-details.txt"
env | grep -v PASSWORD > "$ARCHIVES_DIR/_build-enviroment-variables.txt"
# capture system info
touch "$ARCHIVES_DIR/_sys-info.txt"
{
echo -e "uname -a:\n $(uname -a) \n"
echo -e "df -h:\n $(df -h) \n"
echo -e "free -m:\n $(free -m) \n"
echo -e "nproc:\n $(nproc) \n"
echo -e "lscpu:\n $(lscpu) \n"
echo -e "ip addr:\n $(/sbin/ip addr) \n"
} 2>&1 | tee -a "$ARCHIVES_DIR/_sys-info.txt"
# Magic string used to trim console logs at the appropriate level during wget
echo "-----END_OF_BUILD-----"
wget -O "$ARCHIVES_DIR/console.log" "${BUILD_URL}consoleText"
wget -O "$ARCHIVES_DIR/console-timestamp.log" "$BUILD_URL/timestamps?time=HH:mm:ss&appendLog"
sed -i '/^-----END_OF_BUILD-----$/,$d' "$ARCHIVES_DIR/console.log"
sed -i '/^.*-----END_OF_BUILD-----$/,$d' "$ARCHIVES_DIR/console-timestamp.log"
gzip "$ARCHIVES_DIR"/*.txt "$ARCHIVES_DIR"/*.log
# find and gzip any 'text' files
find "$ARCHIVES_DIR" -type f -print0 \
| xargs -0r file \
| egrep -e ':.*text.*' \
| cut -d: -f1 \
| xargs -d'\n' -r gzip
# Compress Java heap dumps using xz
find "$ARCHIVES_DIR" -type f -name \*.hprof -print0 | xargs -0 xz
zip -r archives.zip "$JENKINS_HOSTNAME/" >> "$ARCHIVES_DIR/_archives.log"
du -sh archives.zip