#!/bin/bash # CI/CD Script for Docker Build and Push # This script builds a Docker image and pushes it to a private container registry # ============================================================================= # Environment Variables (with default values) # ============================================================================= CONTAINER_REGISTRY_URL="${CONTAINER_REGISTRY_URL:-127.0.0.1}" CONTAINER_REGISTRY_USERNAME="${CONTAINER_REGISTRY_USERNAME:-username}" CONTAINER_REGISTRY_NAMESPACE="${CONTAINER_REGISTRY_NAMESPACE:-username}" CONTAINER_REGISTRY_PASSWORD="${CONTAINER_REGISTRY_PASSWORD:-password}" CONTAINER_IMAGE_NAME="${CONTAINER_IMAGE_NAME:-stats-api}" CONTAINER_IMAGE_TAG="${CONTAINER_IMAGE_TAG:-latest}" # ============================================================================= # Functions # ============================================================================= # Print help message print_help() { echo "Usage: $0 [OPTIONS]" echo "" echo "Options:" echo " build Build Docker image" echo " push Push Docker image to registry" echo " help Show this help message (default)" echo "" echo "Environment Variables:" echo " CONTAINER_REGISTRY_URL Registry URL (default: 127.0.0.1)" echo " CONTAINER_REGISTRY_USERNAME Registry username (default: username)" echo " CONTAINER_REGISTRY_NAMESPACE Registry namespace (default: username)" echo " CONTAINER_REGISTRY_PASSWORD Registry password (default: password)" echo " CONTAINER_IMAGE_NAME Image name (default: stats-api)" echo " CONTAINER_IMAGE_TAG Image tag (default: latest)" } # Build Docker image build_image() { FULL_IMAGE_NAME="${CONTAINER_REGISTRY_URL}/${CONTAINER_REGISTRY_NAMESPACE}/${CONTAINER_IMAGE_NAME}:${CONTAINER_IMAGE_TAG}" echo "==========================================" echo "Building Docker Image" echo "==========================================" echo "Image: ${FULL_IMAGE_NAME}" echo "" docker build -t "${FULL_IMAGE_NAME}" . if [ $? -eq 0 ]; then echo "" echo "✓ Build successful: ${FULL_IMAGE_NAME}" return 0 else echo "" echo "✗ Build failed" return 1 fi } # Push Docker image to registry push_image() { FULL_IMAGE_NAME="${CONTAINER_REGISTRY_URL}/${CONTAINER_REGISTRY_NAMESPACE}/${CONTAINER_IMAGE_NAME}:${CONTAINER_IMAGE_TAG}" echo "==========================================" echo "Pushing Docker Image" echo "==========================================" echo "Registry: ${CONTAINER_REGISTRY_URL}" echo "Image: ${FULL_IMAGE_NAME}" echo "" # Login to registry echo "${CONTAINER_REGISTRY_PASSWORD}" | docker login "${CONTAINER_REGISTRY_URL}" \ --username "${CONTAINER_REGISTRY_USERNAME}" \ --password-stdin if [ $? -ne 0 ]; then echo "✗ Registry login failed" return 1 fi # Push image docker push "${FULL_IMAGE_NAME}" if [ $? -eq 0 ]; then echo "" echo "✓ Push successful: ${FULL_IMAGE_NAME}" docker logout "${CONTAINER_REGISTRY_URL}" return 0 else echo "" echo "✗ Push failed" docker logout "${CONTAINER_REGISTRY_URL}" return 1 fi } # ============================================================================= # Main Script # ============================================================================= case "${1:-help}" in build) build_image ;; push) push_image ;; help|*) print_help ;; esac