diff --git a/.drone.yml b/.drone.yml index 844a91c..37e490d 100644 --- a/.drone.yml +++ b/.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