Add rollout wait step to Drone CI pipelines
Both frontend and API pipelines now wait for K8s deployments to fully roll out before marking the build as successful. Polls the K8s API every 5s for up to 300s, checking observedGeneration, updatedReplicas, and readyReplicas to confirm the new image is live in production.
This commit is contained in:
parent
5b566bab4c
commit
6a1c35946e
1 changed files with 56 additions and 0 deletions
56
.drone.yml
56
.drone.yml
|
|
@ -33,6 +33,34 @@ steps:
|
|||
- apk add curl
|
||||
- 'curl -s -X PATCH "https://kubernetes:6443/apis/apps/v1/namespaces/realestate-crawler/deployments/realestate-crawler-ui" -H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" -H "Content-Type: application/json-patch+json" -k -d ''[{"op":"replace","path":"/spec/template/spec/containers/0/image","value":"viktorbarzin/immoweb:''"$DRONE_BUILD_NUMBER"''"}]'' | head'
|
||||
|
||||
- name: Wait for rollout
|
||||
image: alpine
|
||||
commands:
|
||||
- apk add --no-cache curl jq
|
||||
- >-
|
||||
TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token);
|
||||
API="https://kubernetes:6443/apis/apps/v1/namespaces/realestate-crawler/deployments";
|
||||
for DEPLOY in realestate-crawler-ui; do
|
||||
echo "Waiting for $DEPLOY rollout...";
|
||||
for i in $(seq 1 60); do
|
||||
S=$(curl -sk -H "Authorization: Bearer $TOKEN" "$API/$DEPLOY");
|
||||
DESIRED=$(echo "$S" | jq '.spec.replicas');
|
||||
UPDATED=$(echo "$S" | jq '.status.updatedReplicas // 0');
|
||||
READY=$(echo "$S" | jq '.status.readyReplicas // 0');
|
||||
GEN=$(echo "$S" | jq '.metadata.generation');
|
||||
OBS=$(echo "$S" | jq '.status.observedGeneration // 0');
|
||||
if [ "$OBS" -ge "$GEN" ] && [ "$UPDATED" -eq "$DESIRED" ] && [ "$READY" -eq "$DESIRED" ]; then
|
||||
echo "$DEPLOY rollout complete ($READY/$DESIRED ready)";
|
||||
break;
|
||||
fi;
|
||||
echo " $DEPLOY: $READY/$DESIRED ready, $UPDATED updated (attempt $i/60)";
|
||||
sleep 5;
|
||||
done;
|
||||
if [ "$i" -eq 60 ] && { [ "$READY" -ne "$DESIRED" ] || [ "$UPDATED" -ne "$DESIRED" ]; }; then
|
||||
echo "ERROR: $DEPLOY rollout timed out after 300s"; exit 1;
|
||||
fi;
|
||||
done
|
||||
|
||||
---
|
||||
kind: pipeline
|
||||
type: kubernetes
|
||||
|
|
@ -71,3 +99,31 @@ steps:
|
|||
- 'curl -s -X PATCH "https://kubernetes:6443/apis/apps/v1/namespaces/realestate-crawler/deployments/realestate-crawler-api" -H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" -H "Content-Type: application/json-patch+json" -k -d ''[{"op":"replace","path":"/spec/template/spec/containers/0/image","value":"viktorbarzin/realestatecrawler:''"$DRONE_BUILD_NUMBER"''"}]'' | head'
|
||||
- 'curl -s -X PATCH "https://kubernetes:6443/apis/apps/v1/namespaces/realestate-crawler/deployments/realestate-crawler-celery" -H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" -H "Content-Type: application/json-patch+json" -k -d ''[{"op":"replace","path":"/spec/template/spec/containers/0/image","value":"viktorbarzin/realestatecrawler:''"$DRONE_BUILD_NUMBER"''"}]'' | head'
|
||||
- 'curl -s -X PATCH "https://kubernetes:6443/apis/apps/v1/namespaces/realestate-crawler/deployments/realestate-crawler-celery-beat" -H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" -H "Content-Type: application/json-patch+json" -k -d ''[{"op":"replace","path":"/spec/template/spec/containers/0/image","value":"viktorbarzin/realestatecrawler:''"$DRONE_BUILD_NUMBER"''"}]'' | head'
|
||||
|
||||
- name: Wait for rollout
|
||||
image: alpine
|
||||
commands:
|
||||
- apk add --no-cache curl jq
|
||||
- >-
|
||||
TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token);
|
||||
API="https://kubernetes:6443/apis/apps/v1/namespaces/realestate-crawler/deployments";
|
||||
for DEPLOY in realestate-crawler-api realestate-crawler-celery realestate-crawler-celery-beat; do
|
||||
echo "Waiting for $DEPLOY rollout...";
|
||||
for i in $(seq 1 60); do
|
||||
S=$(curl -sk -H "Authorization: Bearer $TOKEN" "$API/$DEPLOY");
|
||||
DESIRED=$(echo "$S" | jq '.spec.replicas');
|
||||
UPDATED=$(echo "$S" | jq '.status.updatedReplicas // 0');
|
||||
READY=$(echo "$S" | jq '.status.readyReplicas // 0');
|
||||
GEN=$(echo "$S" | jq '.metadata.generation');
|
||||
OBS=$(echo "$S" | jq '.status.observedGeneration // 0');
|
||||
if [ "$OBS" -ge "$GEN" ] && [ "$UPDATED" -eq "$DESIRED" ] && [ "$READY" -eq "$DESIRED" ]; then
|
||||
echo "$DEPLOY rollout complete ($READY/$DESIRED ready)";
|
||||
break;
|
||||
fi;
|
||||
echo " $DEPLOY: $READY/$DESIRED ready, $UPDATED updated (attempt $i/60)";
|
||||
sleep 5;
|
||||
done;
|
||||
if [ "$i" -eq 60 ] && { [ "$READY" -ne "$DESIRED" ] || [ "$UPDATED" -ne "$DESIRED" ]; }; then
|
||||
echo "ERROR: $DEPLOY rollout timed out after 300s"; exit 1;
|
||||
fi;
|
||||
done
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue