#!/bin/sh # BusyBox/dash-friendly: no “pipefail”, no “[[ … ]]”, no “+=” set -eu # BusyBox ash does not support “pipefail” ############################################################################### # Mandatory variables – abort if not provided ############################################################################### for var in KANIKO_CONTEXT GIT_REF_NAME GIT_USERNAME GIT_PASSWORD; do eval [ -z \"\${$var:-}\" ] && { echo "Error: $var environment variable is required but not set." >&2 exit 1 } done ############################################################################### # Optional / defaulted variables ############################################################################### REGISTRY_HOST="${REGISTRY_HOST:-git.van-hemmen.com}" REGISTRY_USER="${REGISTRY_USER:-}" REGISTRY_PASS="${REGISTRY_PASS:-}" KANIKO_DESTINATION="${KANIKO_DESTINATION:-}" # optional KANIKO_VERBOSITY="${KANIKO_VERBOSITY:-info}" KANIKO_DOCKERFILE="${KANIKO_DOCKERFILE:-./Dockerfile}" ############################################################################### # Handle registry authentication (only if credentials are present) ############################################################################### AUTH_ENABLED=false if [ -n "${REGISTRY_USER}" ] && [ -n "${REGISTRY_PASS}" ]; then echo "Registry credentials supplied – configuring authentication for ${REGISTRY_HOST}" mkdir -p /kaniko/.docker cat > /kaniko/.docker/config.json <<EOF { "auths": { "${REGISTRY_HOST}": { "username": "${REGISTRY_USER}", "password": "${REGISTRY_PASS}" } } } EOF AUTH_ENABLED=true else echo "Registry credentials not supplied – skipping authentication." fi ############################################################################### # Decide between --destination [...] or --no-push ############################################################################### DEST_FLAGS="" if $AUTH_ENABLED && [ -n "${KANIKO_DESTINATION## }" ]; then echo "Building list of --destination flags" old_ifs="$IFS"; IFS=',' for raw in $KANIKO_DESTINATION; do raw=$(echo "$raw" | xargs) # trim expanded=$(eval echo "$raw") # env-var expansion if any [ -n "$expanded" ] && DEST_FLAGS="$DEST_FLAGS --destination=$expanded" done IFS="$old_ifs" echo "Image(s) will be pushed to the registry." else DEST_FLAGS="--no-push" $AUTH_ENABLED || echo "Registry credentials are missing – image(s) will not be pushed." [ -n "${KANIKO_DESTINATION## }" ] || echo "KANIKO_DESTINATION not provided – using --no-push." fi echo "Kaniko will be called with:${DEST_FLAGS}" ############################################################################### # resume what will be done ############################################################################### echo "Environment Variables:" echo "KANIKO_CONTEXT=${KANIKO_CONTEXT}" echo "GIT_REF_NAME=${GIT_REF_NAME}" echo "GIT_USERNAME=${GIT_USERNAME}" echo "GIT_PASSWORD=$(echo "${GIT_PASSWORD}" | sed 's/\(^..\).*\(..$\)/\1...\2/')" echo "REGISTRY_HOST=${REGISTRY_HOST}" echo "REGISTRY_USER=${REGISTRY_USER}" [ -n "${REGISTRY_PASS}" ] && echo "REGISTRY_PASS=$(echo "${REGISTRY_PASS}" | sed 's/\(^..\).*\(..$\)/\1...\2/')" echo "KANIKO_DESTINATION=${KANIKO_DESTINATION}" echo "KANIKO_VERBOSITY=${KANIKO_VERBOSITY}" echo "KANIKO_DOCKERFILE=${KANIKO_DOCKERFILE}" echo "" if [ "${DEST_FLAGS}" = "--no-push" ]; then echo "Action: Build only (no push)" else echo "Action: Build and push" fi echo "" ############################################################################### # Invoke Kaniko ############################################################################### exec /kaniko/executor \ --verbosity="${KANIKO_VERBOSITY}" \ --context="${KANIKO_CONTEXT}#${GIT_REF_NAME}" \ --dockerfile="${KANIKO_DOCKERFILE}" \ $DEST_FLAGS