ci: fail fast on kaniko job failure with logs, longer job TTL for post-mortem
Build and Deploy Platform / build-and-deploy (push) Failing after 15m40s
Build and Deploy Platform / build-and-deploy (push) Failing after 15m40s
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -44,6 +44,33 @@ jobs:
|
|||||||
echo "IMAGE_TAG=${TAG}" >> "$GITHUB_ENV"
|
echo "IMAGE_TAG=${TAG}" >> "$GITHUB_ENV"
|
||||||
echo "Build tag: ${TAG}"
|
echo "Build tag: ${TAG}"
|
||||||
|
|
||||||
|
- name: Define job waiter
|
||||||
|
shell: sh
|
||||||
|
run: |
|
||||||
|
# wait_for_job <name>: exit 0 on Complete, exit 1 (with kaniko logs) on Failed/timeout
|
||||||
|
cat > wait_for_job.sh <<'ENDSCRIPT'
|
||||||
|
#!/bin/sh
|
||||||
|
JOB="$1"
|
||||||
|
DEADLINE=$(( $(date +%s) + 2400 ))
|
||||||
|
while :; do
|
||||||
|
CONDS="$(kubectl -n ${BUILD_NS} get job/${JOB} -o jsonpath='{range .status.conditions[*]}{.type}={.status} {end}' 2>/dev/null)"
|
||||||
|
case "$CONDS" in
|
||||||
|
*Complete=True*) echo "Job ${JOB} completed"; exit 0 ;;
|
||||||
|
*Failed=True*)
|
||||||
|
echo "Job ${JOB} FAILED — kaniko logs:"
|
||||||
|
kubectl -n ${BUILD_NS} logs job/${JOB} -c kaniko --tail=100 || true
|
||||||
|
exit 1 ;;
|
||||||
|
esac
|
||||||
|
if [ "$(date +%s)" -gt "$DEADLINE" ]; then
|
||||||
|
echo "Timed out waiting for job ${JOB} — kaniko logs:"
|
||||||
|
kubectl -n ${BUILD_NS} logs job/${JOB} -c kaniko --tail=100 || true
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
sleep 15
|
||||||
|
done
|
||||||
|
ENDSCRIPT
|
||||||
|
chmod +x wait_for_job.sh
|
||||||
|
|
||||||
- name: Build backend image (Kaniko Job)
|
- name: Build backend image (Kaniko Job)
|
||||||
shell: sh
|
shell: sh
|
||||||
run: |
|
run: |
|
||||||
@@ -55,7 +82,7 @@ jobs:
|
|||||||
name: ${JOB_NAME}
|
name: ${JOB_NAME}
|
||||||
namespace: ${BUILD_NS}
|
namespace: ${BUILD_NS}
|
||||||
spec:
|
spec:
|
||||||
ttlSecondsAfterFinished: 600
|
ttlSecondsAfterFinished: 3600
|
||||||
backoffLimit: 0
|
backoffLimit: 0
|
||||||
template:
|
template:
|
||||||
spec:
|
spec:
|
||||||
@@ -104,11 +131,7 @@ jobs:
|
|||||||
path: config.json
|
path: config.json
|
||||||
ENDJOB
|
ENDJOB
|
||||||
echo "Waiting for backend build job: ${JOB_NAME}"
|
echo "Waiting for backend build job: ${JOB_NAME}"
|
||||||
if ! kubectl -n ${BUILD_NS} wait --for=condition=complete job/${JOB_NAME} --timeout=40m; then
|
./wait_for_job.sh "${JOB_NAME}"
|
||||||
echo "--- kaniko logs (tail) ---"
|
|
||||||
kubectl -n ${BUILD_NS} logs job/${JOB_NAME} -c kaniko --tail=100 || true
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "Backend build done"
|
echo "Backend build done"
|
||||||
|
|
||||||
- name: Build frontend image (Kaniko Job)
|
- name: Build frontend image (Kaniko Job)
|
||||||
@@ -122,7 +145,7 @@ jobs:
|
|||||||
name: ${JOB_NAME}
|
name: ${JOB_NAME}
|
||||||
namespace: ${BUILD_NS}
|
namespace: ${BUILD_NS}
|
||||||
spec:
|
spec:
|
||||||
ttlSecondsAfterFinished: 600
|
ttlSecondsAfterFinished: 3600
|
||||||
backoffLimit: 0
|
backoffLimit: 0
|
||||||
template:
|
template:
|
||||||
spec:
|
spec:
|
||||||
@@ -168,11 +191,7 @@ jobs:
|
|||||||
path: config.json
|
path: config.json
|
||||||
ENDJOB
|
ENDJOB
|
||||||
echo "Waiting for frontend build job: ${JOB_NAME}"
|
echo "Waiting for frontend build job: ${JOB_NAME}"
|
||||||
if ! kubectl -n ${BUILD_NS} wait --for=condition=complete job/${JOB_NAME} --timeout=40m; then
|
./wait_for_job.sh "${JOB_NAME}"
|
||||||
echo "--- kaniko logs (tail) ---"
|
|
||||||
kubectl -n ${BUILD_NS} logs job/${JOB_NAME} -c kaniko --tail=100 || true
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "Frontend build done"
|
echo "Frontend build done"
|
||||||
|
|
||||||
- name: Update GitOps repo and push
|
- name: Update GitOps repo and push
|
||||||
|
|||||||
Reference in New Issue
Block a user