#!/usr/bin/env bash # build.sh [tag] # Packages the smtp-relay context, uploads to MinIO, runs Kaniko in-cluster, waits. set -euo pipefail TAG="${1:-latest}" HARBOR="harbor.manabo.org" IMAGE="${HARBOR}/library/smtp-relay:${TAG}" BUCKET="kaniko-builds" CONTEXT_KEY="smtp-relay/context.tar.gz" echo "==> Building ${IMAGE}" echo "==> Packaging context ..." tar -czf /tmp/kaniko-context.tar.gz \ --exclude='.git' \ --exclude='build.sh' \ --exclude='k8s' \ -C "$(dirname "$0")" . echo "==> Uploading to MinIO (${BUCKET}/${CONTEXT_KEY}) ..." mc cp /tmp/kaniko-context.tar.gz "minio/${BUCKET}/${CONTEXT_KEY}" rm /tmp/kaniko-context.tar.gz JOB_NAME="kaniko-smtp-relay-$(date +%s)" echo "==> Launching Kaniko job: ${JOB_NAME}" cat < Waiting for build (timeout 10m) ..." kubectl wait "job/${JOB_NAME}" -n kaniko \ --for=condition=complete \ --timeout=600s || { echo "==> Build FAILED. Logs:" POD=$(kubectl get pods -n kaniko -l "job-name=${JOB_NAME}" -o name | head -1) kubectl logs -n kaniko "$POD" --all-containers kubectl delete "job/${JOB_NAME}" -n kaniko --ignore-not-found exit 1 } echo "==> Done: ${IMAGE}"