#!/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: <a href=\"$LOGS_SERVER/$SILO/$ARCHIVES_DIR\">$LOGS_SERVER/$SILO/$ARCHIVES_DIR</a>" mkdir .archives cd .archives/ || exit 1 cat > deploy-archives.xml <<EOF <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>logs</groupId> <artifactId>logs</artifactId> <version>1.0.0</version> <packaging>pom</packaging> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> <configuration> <skip>true</skip> </configuration> </plugin> <plugin> <groupId>org.sonatype.plugins</groupId> <artifactId>maven-upload-plugin</artifactId> <version>0.0.1</version> <executions> <execution> <id>publish-site</id> <phase>deploy</phase> <goals> <goal>upload-file</goal> </goals> <configuration> <serverId>onap-log-archives</serverId> <repositoryUrl>$LOGS_REPO_URL/content-compressed</repositoryUrl> <file>archives.zip</file> <repositoryPath>$SILO</repositoryPath> </configuration> </execution> </executions> </plugin> </plugins> </build> </project> 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