1
0

Added pipeline watcher script

Signed-off-by: James Ketrenos <james.p.ketrenos@intel.com>
This commit is contained in:
James Ketrenos 2019-12-18 17:29:07 -08:00
parent dbbf9c0c16
commit 4ed8e2fb81

146
scripts/watch.sh Executable file
View File

@ -0,0 +1,146 @@
#!/bin/bash
PIPELINE=$1
[[ "${PIPELINE}" == "" ]] && {
>&2 echo "usage: watch PIPELINE"
exit -1
}
# Bring in the variables from SOLUTION file, supporting
# nested substitution
. SOLUTION
VARS=($(sed -nE "s,(^[^#][^=]*).*$,\1,pg" SOLUTION))
for var in ${VARS[@]}; do
export ${var}
done
PROJECT="vtt/sws/osgc/solutions/$(basename $(pwd))"
URI_PROJECT=$(echo ${PROJECT} | sed -E 's,/,%2F,g')
eval $(grep ^SYS_OSGC_TOKEN SECRETS)
[[ "$SYS_OSGC_TOKEN" == "" ]] && {
>&2 echo "SECRETS needs to contain a GitLab token for SYS_OSGC_TOKEN."
exit -1
}
GITLAB="https://gitlab.devtools.intel.com"
echo "Looking for pipeline jobs for ${PIPELINE}"
function get_jobs {
ECHO=$1
# Split the JSON results into line-by-line breakouts for
# easy sed matching
sed -E 's#([[{},]|])#\n\1\n#g' | grep '^[^,]' | {
SCOPE=0
JOB=""
STATUS=""
while read line; do
case ${SCOPE} in
2)
echo $line | grep -qE '^([{[])' && {
SCOPE=$((SCOPE+1))
(( ECHO )) && echo "Scope: ${SCOPE}"
continue
}
echo $line | grep -qE '^([}]|])' && {
SCOPE=$((SCOPE-1))
(( ECHO )) && echo "Scope: ${SCOPE}"
continue
}
[[ "${JOB}" == "" ]] &&
JOB=$(echo ${line} |
sed -nE 's,^"id"\s*:\s*([0-9]+).*$,\1,p')
[[ "${STATUS}" == "" ]] &&
STATUS=$(echo ${line} |
sed -nE 's,^.*"status"\s*:\s*"([^"]+).*$,\1,p')
[[ "${JOB}" != "" ]] && [[ "${STATUS}" != "" ]] && {
echo "${JOB}:${STATUS} "
JOB=""
STATUS=""
}
;;
*)
echo $line | grep -qE '^([{[])' && {
SCOPE=$((SCOPE+1))
(( ECHO )) && echo "Scope: ${SCOPE}"
continue
}
echo $line | grep -qE '^([}]|])' && {
(( SCOPE == 0 )) && {
return 0
}
SCOPE=$((SCOPE-1))
(( ECHO )) && echo "Scope: ${SCOPE}"
continue
}
esac
done
}
}
function update_log {
ID=$1
[[ ! -d "logs" ]] && mkdir "logs"
curl --noproxy '*' -s -X GET \
--header "PRIVATE-TOKEN: ${SYS_OSGC_TOKEN}" \
"${GITLAB}/api/v4/projects/${URI_PROJECT}/jobs/${ID}/trace" > "logs/${ID}-latest"
LINES=1
[[ -e "logs/${ID}" ]] && {
LINES=$(wc -l "logs/${ID}")
LINES=${LINES%% *}
}
tail -n +${LINES} "logs/${ID}-latest"
mv "logs/${ID}-latest" "logs/${ID}"
}
while true; do
RESULTS=$(curl --noproxy '*' -s -X GET \
--header "PRIVATE-TOKEN: ${SYS_OSGC_TOKEN}" \
--header "Content-Type: application/json" \
"${GITLAB}/api/v4/projects/${URI_PROJECT}/pipelines/${PIPELINE}/jobs")
JOBS=($(echo "${RESULTS}" | get_jobs))
echo "JOBS: ${JOBS[@]}"
MORE=0
FAIL=0
for JOB in ${JOBS[@]}; do
ID=${JOB%%:*}
STATUS=${JOB##*:}
case ${STATUS,,} in
pending)
MORE=$((MORE+1))
;;
created)
MORE=$((MORE+1))
;;
running)
update_log ${ID}
MORE=$((MORE+1))
;;
success)
update_log ${ID}
;;
cancelled)
FAIL=1
;;
failed)
FAIL=1
;;
esac
done
(( MORE == 0 )) && {
echo "No more jobs. Exiting."
exit ${FAIL}
}
echo "Sleeping 5 seconds for ${MORE} jobs."
sleep 5
done