Push intermediate builder stages as :builder tags and use cache_from to reuse dependency layers (pip install, npm ci) across builds.
164 lines
6.2 KiB
YAML
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
|