kind: pipeline type: kubernetes name: frontend concurrency: limit: 1 timeout: 20 trigger: branch: - master event: - push steps: - name: Build frontend image image: plugins/docker settings: username: viktorbarzin password: from_secret: dockerhub-token repo: viktorbarzin/immoweb dockerfile: frontend/Dockerfile context: frontend tags: - latest - ${DRONE_BUILD_NUMBER} - name: Update deployment image: alpine commands: - 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 name: api concurrency: limit: 1 timeout: 20 trigger: branch: - master event: - push steps: - name: Build API image image: plugins/docker settings: username: viktorbarzin password: from_secret: dockerhub-token repo: viktorbarzin/realestatecrawler dockerfile: Dockerfile context: . tags: - latest - ${DRONE_BUILD_NUMBER} cache_from: viktorbarzin/realestatecrawler:latest - name: Update deployment image: alpine commands: - apk add curl - '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