72 lines
3.1 KiB
Bash
72 lines
3.1 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
: "${DEPLOYMENT_ENVIRONMENT:?DEPLOYMENT_ENVIRONMENT is required}"
|
|
: "${KUBE_NAMESPACE:?KUBE_NAMESPACE is required}"
|
|
: "${PUBLIC_API_ORIGIN:?PUBLIC_API_ORIGIN is required}"
|
|
: "${MONGODB_CONNECTION_STRING:?MONGODB_CONNECTION_STRING is required}"
|
|
: "${AUTH_JWT_KEY:?AUTH_JWT_KEY is required}"
|
|
: "${INTERNAL_PURGE_SECRET:?INTERNAL_PURGE_SECRET is required}"
|
|
: "${STRIPE_SECRET_KEY:?STRIPE_SECRET_KEY is required}"
|
|
: "${STRIPE_WEBHOOK_SECRET:?STRIPE_WEBHOOK_SECRET is required}"
|
|
|
|
NODES="${NODES:-192.168.86.72 192.168.86.73 192.168.86.74}"
|
|
BUILD_TAG="$(git rev-parse HEAD)"
|
|
API_IMAGE="step3-questions:${BUILD_TAG}"
|
|
WEB_IMAGE="step3-web:${BUILD_TAG}"
|
|
API_TAR="/tmp/step3-questions-${DEPLOYMENT_ENVIRONMENT}.tar"
|
|
WEB_TAR="/tmp/step3-web-${DEPLOYMENT_ENVIRONMENT}.tar"
|
|
|
|
cleanup() {
|
|
rm -f "${API_TAR}" "${WEB_TAR}"
|
|
docker image rm "${API_IMAGE}" "${WEB_IMAGE}" 2>/dev/null || true
|
|
docker image prune -f >/dev/null || true
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
rm -f "${API_TAR}" "${WEB_TAR}"
|
|
docker container prune -f
|
|
docker image prune -f
|
|
docker image prune -af --filter "until=24h"
|
|
docker builder prune -af || true
|
|
docker system df
|
|
df -h
|
|
|
|
dotnet test api/QuestionsApi.Tests/QuestionsApi.Tests.csproj -c Release
|
|
docker build --build-arg BUILD_REVISION="${BUILD_TAG}" -t "${API_IMAGE}" api/QuestionsApi
|
|
docker build \
|
|
--build-arg BUILD_REVISION="${BUILD_TAG}" \
|
|
--build-arg DEPLOYMENT_ENVIRONMENT="${DEPLOYMENT_ENVIRONMENT}" \
|
|
--build-arg PUBLIC_API_ORIGIN="${PUBLIC_API_ORIGIN}" \
|
|
-f web/Dockerfile -t "${WEB_IMAGE}" .
|
|
|
|
docker save "${API_IMAGE}" -o "${API_TAR}"
|
|
docker save "${WEB_IMAGE}" -o "${WEB_TAR}"
|
|
for node in ${NODES}; do
|
|
scp -o StrictHostKeyChecking=no "${API_TAR}" hz@"${node}":/tmp/step3-questions.tar
|
|
scp -o StrictHostKeyChecking=no "${WEB_TAR}" hz@"${node}":/tmp/step3-web.tar
|
|
ssh -o StrictHostKeyChecking=no hz@"${node}" \
|
|
"sudo ctr -n k8s.io images import /tmp/step3-questions.tar && sudo ctr -n k8s.io images import /tmp/step3-web.tar && rm -f /tmp/step3-questions.tar /tmp/step3-web.tar"
|
|
done
|
|
|
|
kubectl apply -f "k8s/overlays/${DEPLOYMENT_ENVIRONMENT}/namespace.yaml"
|
|
kubectl create secret generic step3-runtime-secrets \
|
|
--from-literal=mongodb-connection-string="${MONGODB_CONNECTION_STRING}" \
|
|
--from-literal=jwt-key="${AUTH_JWT_KEY}" \
|
|
--from-literal=purge-secret="${INTERNAL_PURGE_SECRET}" \
|
|
--from-literal=stripe-secret-key="${STRIPE_SECRET_KEY}" \
|
|
--from-literal=stripe-webhook-secret="${STRIPE_WEBHOOK_SECRET}" \
|
|
--dry-run=client -o yaml | kubectl apply -n "${KUBE_NAMESPACE}" -f -
|
|
|
|
kubectl kustomize "k8s/overlays/${DEPLOYMENT_ENVIRONMENT}" \
|
|
| sed "s|step3-questions:latest|${API_IMAGE}|g; s|step3-web:latest|${WEB_IMAGE}|g" \
|
|
| kubectl apply -f -
|
|
|
|
kubectl rollout status deployment/step3-api -n "${KUBE_NAMESPACE}" --timeout=240s
|
|
kubectl get --raw "/api/v1/namespaces/${KUBE_NAMESPACE}/services/step3-api:http/proxy/readyz" >/dev/null
|
|
kubectl rollout status deployment/step3-web -n "${KUBE_NAMESPACE}" --timeout=240s
|
|
kubectl get --raw "/api/v1/namespaces/${KUBE_NAMESPACE}/services/step3-web:http/proxy/healthz" >/dev/null
|
|
|
|
echo "Deployed ${DEPLOYMENT_ENVIRONMENT} revision ${BUILD_TAG}."
|
|
|