X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=jjb%2Fautorelease%2Finclude-raw-autorelease-notify-build-failure.sh;h=ca31d529c5d3f0bd25894c74f52c4794d0dd29bd;hb=8da0ea5b459eae1b2de8540a9d574cac8abdeb7e;hp=645b70456308dd4adb9977dd52598c2c9ed75352;hpb=7571072a22379818bde4bb912228c313db58ca27;p=releng%2Fbuilder.git diff --git a/jjb/autorelease/include-raw-autorelease-notify-build-failure.sh b/jjb/autorelease/include-raw-autorelease-notify-build-failure.sh index 645b70456..ca31d529c 100644 --- a/jjb/autorelease/include-raw-autorelease-notify-build-failure.sh +++ b/jjb/autorelease/include-raw-autorelease-notify-build-failure.sh @@ -1,4 +1,4 @@ -#!/bin/bash -x +#!/bin/bash # @License EPL-1.0 ############################################################################## # Copyright (c) 2017 The Linux Foundation and others. @@ -9,13 +9,15 @@ # http://www.eclipse.org/legal/epl-v10.html ############################################################################## +NEWLINE=$'\n' RELEASE_EMAIL="release@lists.opendaylight.org" ARCHIVES_DIR="$JENKINS_HOSTNAME/$JOB_NAME/$BUILD_NUMBER" CONSOLE_LOG="/tmp/autorelease-build.log" STREAM=${JOB_NAME#*-*e-} +ERROR_LOG="$WORKSPACE/error.log.gz" # get console logs -wget -O "$CONSOLE_LOG" "${BUILD_URL}consoleText" +wget --no-verbose -O "$CONSOLE_LOG" "${BUILD_URL}consoleText" # TODO: This section is still required since some of the projects use # description. Remove this section when the reactor info is more consistant. @@ -37,13 +39,12 @@ if [[ ${REACTOR_INFO} =~ .*::*.*::*. ]]; then PROJECT_=$(echo "${REACTOR_INFO}" | awk -F'::' '{ gsub(/^[ \t]+|[ \t]+$/, "", $2); print $2 }') NAME=$(echo "${REACTOR_INFO}" | awk -F'::' '{ gsub(/^[ \t]+|[ \t]+$/, "", $3); print $3 }') else - # set ARTIFACTID to partial format + # set project from partial format ODL="" PROJECT_="" NAME=$(echo "${REACTOR_INFO}" | awk '{ gsub(/^[ \t]+|[ \t]+$/, ""); print }') fi - # determine ARTIFACT_ID for project mailing list ARTIFACT_ID=$(awk -F: '/\[ERROR\].*mvn -rf :/ { print $2}' $CONSOLE_LOG) @@ -54,37 +55,50 @@ ARTIFACT_ID=$(awk -F: '/\[ERROR\].*mvn -rf :/ { print $2}' $CONSOLE_LOG) # project.groupId is not set but IS inherited from project.parent.groupId # else # exclude project mailing list -grouplist=() -while IFS="" read -r p; do - GROUP=$(xmlstarlet sel\ - -N "x=http://maven.apache.org/POM/4.0.0"\ - -t -m "/x:project[x:artifactId='$ARTIFACT_ID']"\ - --if "/x:project/x:groupId"\ - -v "/x:project/x:groupId"\ - --elif "/x:project/x:parent/x:groupId"\ - -v "/x:project/x:parent/x:groupId"\ - --else -o ""\ - "$p" 2>/dev/null) - if [ ! -z "${GROUP}" ]; then - grouplist+=($(echo "${GROUP}" | awk -F'.' '{ print $3 }')) +if [ ! -z "$ARTIFACT_ID" ]; then + grouplist=() + while IFS="" read -r p; do + GROUP=$(xmlstarlet sel\ + -N "x=http://maven.apache.org/POM/4.0.0"\ + -t -m "/x:project[x:artifactId='$ARTIFACT_ID']"\ + --if "/x:project/x:groupId"\ + -v "/x:project/x:groupId"\ + --elif "/x:project/x:parent/x:groupId"\ + -v "/x:project/x:parent/x:groupId"\ + --else -o ""\ + "$p" 2>/dev/null) + if [ ! -z "${GROUP}" ]; then + grouplist+=($(echo "${GROUP}" | awk -F'.' '{ print $3 }')) + fi + done < <(find . -name "pom.xml") + + if [ "${#grouplist[@]}" -eq 1 ]; then + PROJECT="${grouplist[0]}" + elif [ "${#grouplist[@]}" -gt 1 ]; then + GROUPLIST="NOTE: The artifactId: $ARTIFACT_ID matches multiple groups: ${grouplist[*]}" + else + echo "Failed to determine project.groupId using xpaths" fi -done < <(find . -name "pom.xml") - -if [ "${#grouplist[@]}" -eq 1 ]; then - PROJECT="${grouplist[0]}" else - GROUPLIST="NOTE: The artifactId: $ARTIFACT_ID matches multiple groups: ${grouplist[*]}" + echo "Failed to determine ARTIFACT_ID" + exit 1 fi # Construct email subject & body PROJECT_STRING=${PROJECT:+" from $PROJECT"} SUBJECT="[release] Autorelease $STREAM failed to build $ARTIFACT_ID$PROJECT_STRING" +# shellcheck disable=SC2034 +ATTACHMENT_INCLUDE="Attached is a snippet of the error message related to the +failure that we were able to automatically parse as well as console logs." +# shellcheck disable=SC2034 +ATTACHMENT_EXCLUDE="Unable to attach error message snippet related to the failure +since this exceeds the mail server attachment size limit. Please +refer ${ERROR_LOG##*/} in archives directory." +ATTACHMENT=ATTACHMENT_INCLUDE # default behaviour BODY="Attention ${PROJECT:-"OpenDaylight"}-devs, Autorelease $STREAM failed to build $ARTIFACT_ID$PROJECT_STRING in build -$BUILD_NUMBER. Attached is a snippet of the error message related to the -failure that we were able to automatically parse as well as console logs. -${PROJECT:+"$GROUPLIST"} +$BUILD_NUMBER. \${!ATTACHMENT} ${PROJECT:+${NEWLINE}${GROUPLIST}} Console Logs: https://logs.opendaylight.org/$SILO/$ARCHIVES_DIR @@ -107,21 +121,31 @@ if ([ ! -z "${NAME}" ] || [ ! -z "${ARTIFACT_ID}" ]) && [[ "${BUILD_STATUS}" != # 1. Full format: ODL :: $PROJECT :: $ARTIFACT_ID # 2. Partial format: Building $ARTIFACT_ID sed -e "/\[INFO\] Building \(${NAME} \|${ARTIFACT_ID} \|${ODL} :: ${PROJECT_} :: ${NAME} \)/,/Reactor Summary:/!d;//d" \ - $CONSOLE_LOG > /tmp/error.txt + $CONSOLE_LOG | gzip > "$ERROR_LOG" if [ -n "${PROJECT}" ]; then RELEASE_EMAIL="${RELEASE_EMAIL}, ${PROJECT}-dev@lists.opendaylight.org" fi + file_size=$(du -k "$ERROR_LOG" | cut -f1) + # Only send emails in production (releng), not testing (sandbox) if [ "${SILO}" == "releng" ]; then - echo "${BODY}" | mail -a /tmp/error.txt \ - -r "Jenkins " \ - -s "${SUBJECT}" "${RELEASE_EMAIL}" + if [[ "$file_size" -gt 100 ]]; then + # shellcheck disable=SC2034 + ATTACHMENT=ATTACHMENT_EXCLUDE + eval echo \""${BODY}"\" | mail \ + -r "Jenkins " \ + -s "${SUBJECT}" "${RELEASE_EMAIL}" + else + eval echo \""${BODY}"\" | mail -a "$ERROR_LOG" \ + -r "Jenkins " \ + -s "${SUBJECT}" "${RELEASE_EMAIL}" + fi elif [ "${SILO}" == "sandbox" ]; then echo "Running in sandbox, not actually sending notification emails" echo "Subject: ${SUBJECT}" - echo "Body: ${BODY}" + eval echo \""Body: ${BODY}"\" else echo "Not sure how to notify in \"${SILO}\" Jenkins silo" fi