-
Notifications
You must be signed in to change notification settings - Fork 0
/
oc_run_job.sh
executable file
·70 lines (62 loc) · 2.35 KB
/
oc_run_job.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/bin/bash
OC=$1
OC_PROJECT=$2
JOB_NAME=$3
JQ=$4
IFS=' ' read -ra OC_TEMPLATE_VARS <<< "$5"
IFS=' ' read -ra OC_TEMPLATE_VARS_OVERRIDE <<< "$6"
for i in "${!OC_TEMPLATE_VARS_OVERRIDE[@]}"
do
IFS='=' read -ra TEMPLATE_VAR <<< "${OC_TEMPLATE_VARS_OVERRIDE[i]}"
OC_TEMPLATE_VARS=("${OC_TEMPLATE_VARS[@]/#${TEMPLATE_VAR[0]}=*/${OC_TEMPLATE_VARS_OVERRIDE[i]}}")
done
for i in "${!OC_TEMPLATE_VARS[@]}"
do
IFS='=' read -ra TEMPLATE_VAR <<< "${OC_TEMPLATE_VARS[i]}"
if [ "${TEMPLATE_VAR[0]}" == 'GIT_SHA1' ]; then
GIT_SHA1="${TEMPLATE_VAR[1]}"
fi
done
get_job_phase() {
# We select the last job as previous failed jobs would still be returned by this selector
$OC -n "$OC_PROJECT" get pods --selector job-name="$JOB_NAME" --sort-by='{.metadata.resourceVersion}' -o json | jq -r ".items[-1].status.phase"
}
echo "✓ removing old config for $JOB_NAME"
$OC -n "$OC_PROJECT" delete job "$JOB_NAME"
# Find the job config for this job and run `oc apply` for it
shopt -s globstar nullglob
for FILE in openshift/deploy/job/**/*.yml; do
JOB_CONFIG_STRING=$($OC process --ignore-unknown-parameters=true -f "$FILE" "${OC_TEMPLATE_VARS[@]}" \
| $JQ "if .items[].metadata.name == \"$JOB_NAME\" then .items[].metadata.labels=(.items[].metadata.labels + { \"cas-pipeline/commit.id\":\"$GIT_SHA1\" }) else empty end")
if [[ -n "$JOB_CONFIG_STRING" ]]; then
echo "✓ triggering job $JOB_NAME"
echo "$JOB_CONFIG_STRING" | "$OC" -n "$OC_PROJECT" apply --wait --overwrite --validate -f-
fi
done
echo -n "Waiting for job to start"
while true; do
case $(get_job_phase) in
Pending | Unknown )
echo -n "."
sleep 5
;;
Running )
echo ""
# This loop makes the script attempt to read the logs again in case of an unexpected EOF
pod_name="$($OC -n "$OC_PROJECT" get pods --selector job-name="$JOB_NAME" --sort-by='{.metadata.resourceVersion}' -o json | jq -r ".items[-1].metadata.name")"
echo "✓ running job $JOB_NAME in $pod_name"
"$OC" -n "$OC_PROJECT" logs "$pod_name" --follow
sleep 5
;;
Succeeded )
echo ""
echo "✓ Job succeeded."
exit 0
;;
Failed )
echo ""
echo "✘ Job failed."
exit 1
;;
esac
done