wrongmove/.drone.yml
Viktor Barzin f3cbeb3f5e
Cache Docker builder stages in Drone CI for faster builds
Push intermediate builder stages as :builder tags and use cache_from
to reuse dependency layers (pip install, npm ci) across builds.
2026-02-09 21:35:42 +00:00

164 lines
6.2 KiB
YAML

kind: pipeline
type: kubernetes
name: frontend
concurrency:
limit: 1
timeout: 20
trigger:
branch:
- master
event:
- push
steps:
- name: Cache builder stage
image: plugins/docker
settings:
username: viktorbarzin
password:
from_secret: dockerhub-token
repo: viktorbarzin/immoweb
dockerfile: frontend/Dockerfile
context: frontend
target: builder
cache_from:
- viktorbarzin/immoweb:builder
tags:
- builder
- name: Build frontend image
image: plugins/docker
settings:
username: viktorbarzin
password:
from_secret: dockerhub-token
repo: viktorbarzin/immoweb
dockerfile: frontend/Dockerfile
context: frontend
cache_from:
- viktorbarzin/immoweb:builder
- viktorbarzin/immoweb:latest
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: Cache builder stage
image: plugins/docker
settings:
username: viktorbarzin
password:
from_secret: dockerhub-token
repo: viktorbarzin/realestatecrawler
dockerfile: Dockerfile
context: .
target: builder
cache_from:
- viktorbarzin/realestatecrawler:builder
tags:
- builder
- name: Build API image
image: plugins/docker
settings:
username: viktorbarzin
password:
from_secret: dockerhub-token
repo: viktorbarzin/realestatecrawler
dockerfile: Dockerfile
context: .
cache_from:
- viktorbarzin/realestatecrawler:builder
- viktorbarzin/realestatecrawler:latest
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-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