From 8b8da3534b70a685fad460fa36723e38648302db Mon Sep 17 00:00:00 2001 From: Leonidas Apostolidis Date: Mon, 13 Sep 2021 22:14:17 +0100 Subject: [PATCH] Add a notification CI job for successful or failed pipelines --- .gitlab-ci.yml | 31 ++++++++++++++--- tools/broadcast.cfg | 5 +++ tools/nagnotify.sh | 77 ++++++++++++++++++++++++++++++++++++++++++ tools/sendbroadcast.sh | 42 +++++++++++++++++++++++ 4 files changed, 151 insertions(+), 4 deletions(-) create mode 100644 tools/broadcast.cfg create mode 100755 tools/nagnotify.sh create mode 100755 tools/sendbroadcast.sh diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d9a41d0..fca0ded 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -10,10 +10,14 @@ variables: services: - docker:19.03.1-dind +stages: + - build_docker + - notification + dev_deploy: before_script: - base64 -d $SA_Development | docker login -u _json_key --password-stdin https://eu.gcr.io - stage: build + stage: build_docker script: - cd docker - docker build -t $IMAGE_TAG . @@ -24,7 +28,7 @@ dev_deploy: prod_deploy: before_script: - base64 -d $SA_Production | docker login -u _json_key --password-stdin https://eu.gcr.io - stage: build + stage: build_docker script: - docker pull $IMAGE_TAG - docker tag $IMAGE_TAG $IMAGE_TAG_PROD @@ -35,11 +39,30 @@ prod_deploy: stable_deploy: before_script: - base64 -d $SA_Production | docker login -u _json_key --password-stdin https://eu.gcr.io - stage: build + stage: build_docker script: - docker pull $IMAGE_TAG - docker tag $IMAGE_TAG $IMAGE_TAG_STABLE - docker push $IMAGE_TAG_STABLE only: - /stable_v.*/ - \ No newline at end of file + +successful-results: + image: eu.gcr.io/vnc-development/docker-vnc-deb-builder:latest + stage: notification + script: + - echo "SUCCESS" > result.txt + - ./tools/nagnotify.sh || echo "done" + rules: + - if: '$CI_COMMIT_BRANCH == "master"' + when: on_success + +failed-results: + image: eu.gcr.io/vnc-development/docker-vnc-deb-builder:latest + stage: notification + script: + - echo "FAILURE" > result.txt + - ./tools/nagnotify.sh || echo "done" + rules: + - if: '$CI_COMMIT_BRANCH == "master"' + when: on_failure diff --git a/tools/broadcast.cfg b/tools/broadcast.cfg new file mode 100644 index 0000000..57a84b2 --- /dev/null +++ b/tools/broadcast.cfg @@ -0,0 +1,5 @@ +BROADCASTSENDER=jenkins.bot@vnc.biz +BROADCASTID=broadcast-gel4it1o9fvi@vnc.biz +BCTITLE=Factory - VNC Hybridauth2 +BCRECEIPIENTS=leonidas.apostolidis@vnc.biz +BCRESTURL=https://xmpp.vnc.biz/rest diff --git a/tools/nagnotify.sh b/tools/nagnotify.sh new file mode 100755 index 0000000..5fdfa03 --- /dev/null +++ b/tools/nagnotify.sh @@ -0,0 +1,77 @@ +#!/bin/bash + +####### +# Use Jenkins env vars if set otherwise use the gitlab-ci ones +BUILD_URL=${BUILD_URL:-$CI_PIPELINE_URL} +BRANCH_NAME=${BRANCH_NAME:-$CI_COMMIT_REF_NAME} +####### + +echo "BRANCH: $BRANCH_NAME" + +if [ -f result.txt ]; then + RESULT=$(cat result.txt) + #debug + echo "result:" + cat result.txt +fi + +if [ -f code-analysis.txt ]; then + CODEERR=$(cat code-analysis.txt) + #debug + echo "code-analysis" + cat code-analysis.txt +fi + +AUTHOR=$(git log -1 | grep "^Author: " | awk -F "Author:" '{print $2}' | awk -F "<" '{print $1}') + +echo "All local branches:"; git branch +echo "BRANCH_NAME: $BRANCH_NAME" + +JCHANGELOG=$(git log --pretty=format:%s origin/master..origin/$BRANCH_NAME | nl) + +echo "changes:" +echo "$JCHANGELOG" + + +if [ "$RESULT" ]; then + echo "$BUILD_URL - $RESULT" + case $RESULT in + SUCCESS|success) + if [ "$BRANCH_NAME" = "master" ]; then + echo -e "job succesfully finished: $BUILD_URL \n Changes: \n $JCHANGELOG" | ./tools/sendbroadcast.sh + # nagzillac "room^vncmail__project@conference.vnc.biz^job succesfully finished: $BUILD_URL - new APK is available at https://basepackages.vnc.biz/apk/VNCmail-2.0.0-$BUILD_ID.apk" + else + echo -e "job succesfully finished: $BUILD_URL \n Changes: \n $JCHANGELOG \n Author: $AUTHOR" | ./tools/sendbroadcast.sh + # nagzillac "room^vncmail__project@conference.vnc.biz^job succesfully finished: $BUILD_URL" + fi + ;; + UNSTABLE|WARNING|unstable) + if [ "$CODEERR" ]; then + if [ "$BRANCH_NAME" = "master" ]; then + echo -e "job finished with warnings: $BUILD_URL \n $CODEERR \n Changes: \n $JCHANGELOG " | ./tools/sendbroadcast.sh + # nagzillac "room^vncmail__project@conference.vnc.biz^job finished with warnings: $BUILD_URL \n $CODEERR \n new APK is available at https://basepackages.vnc.biz/apk/VNCmail-2.0.0-$BUILD_ID.apk" + else + echo -e "job finished with warnings: $BUILD_URL \n $CODEERR \n Changes: \n $JCHANGELOG \n Author: $AUTHOR" | ./tools/sendbroadcast.sh + # nagzillac "room^vncmail__project@conference.vnc.biz^job finished with warnings: $BUILD_URL \n $CODEERR" + fi + else + echo -e "job finished with warnings: $BUILD_URL \n Changes: \n $JCHANGELOG \n Author: $AUTHOR" | ./tools/sendbroadcast.sh + #nagzillac "room^vncmail__project@conference.vnc.biz^job finished with warnings: $BUILD_URL" + fi + ;; + FAILURE) + if [ "$CODEERR" ]; then + CODENUM=$(wc -l code-analysis.txt | awk '{print $1}') + echo -e "job FAILED - please check: $BUILD_URL \n code analysis found $CODENUM errors \n $CODEERR \n\n Changes: \n $JCHANGELOG \n Author: $AUTHOR" | ./tools/sendbroadcast.sh + # nagzillac "room^vncmail__project@conference.vnc.biz^job FAILED - please check: $BUILD_URL \n code analysis found $CODENUM errors" + else + echo -e "job FAILED - please check: $BUILD_URL immediately \n Changes: \n $JCHANGELOG \n Author: $AUTHOR" | ./tools/sendbroadcast.sh + # nagzillac "room^vncmail__project@conference.vnc.biz^job FAILED - please check: $BUILD_URL immediately" + fi + ;; + *) + echo -e "job finished with ambigous result - please check: $BUILD_URL immediately \n Changes: \n $JCHANGELOG \n Author: $AUTHOR" | ./tools/sendbroadcast.sh + # nagzillac "chat^stefan.saenger@vnc.biz^job finished with ambigous result - please check: $BUILD_URL immediately" + ;; + esac +fi diff --git a/tools/sendbroadcast.sh b/tools/sendbroadcast.sh new file mode 100755 index 0000000..071fd97 --- /dev/null +++ b/tools/sendbroadcast.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +BCBODY=`cat` + +function die_err() { + echo "$0: $*" >&2 + exit 1 +} + + +OldPWD=$(pwd) +BaseDir=$(git rev-parse --show-toplevel) +cd "$BaseDir" || exit 1 + + +CURLCRED="vnctalk:ohtai2Eicai4aiting7bec2am6Aih" + +if [ -f "tools/broadcast.cfg" ]; then + echo "found config" +else + cd "$OldPWD" || exit 1 + die_err "no broadcst config - bailing out" +fi + +RECEIPIENTS=$(cat tools/broadcast.cfg | grep "^BCRECEIPIENTS" | awk -F "=" '{print $2}' | tr ',' '\n' | awk '{print "" $0 ""}' | sed 's/ //g' | grep -v ""); +BROADCASTSENDER=$(cat tools/broadcast.cfg | grep "^BROADCASTSENDER" | awk -F "=" '{print $2}'); +BROADCASTID=$(cat tools/broadcast.cfg | grep "^BROADCASTID" | awk -F "=" '{print $2}'); +BCTITLE=$(cat tools/broadcast.cfg | grep "^BCTITLE" | awk -F "=" '{print $2}'); +MSGID=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1) +BCRESTURL=$(cat tools/broadcast.cfg | grep "^BCRESTURL" | awk -F "=" '{print $2}'); + +echo "" > "/tmp/$MSGID.xml" +echo "$BCBODY" >> "/tmp/$MSGID.xml" +echo "" >> "/tmp/$MSGID.xml" +echo "$RECEIPIENTS" >> "/tmp/$MSGID.xml" +echo " +" >> "/tmp/$MSGID.xml" + +echo "raw message:" +cat "/tmp/$MSGID.xml" + +curl -u "$CURLCRED" -H "Content-Type: text/xml" -X POST --data-binary "@/tmp/$MSGID.xml" "$BCRESTURL"