Files
www.cialloo.com/script/ci.sh
cialloo 7f58c9c847
All checks were successful
CI - Build and Push / Build and Push Docker Image (push) Successful in 17s
feat: add S3 configuration and utility functions for blog image handling
2025-10-26 07:56:19 +08:00

159 lines
5.1 KiB
Bash

#!/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:-image-name}"
CONTAINER_IMAGE_TAG="${CONTAINER_IMAGE_TAG:-latest}"
# Application Environment Variables
VITE_S3_ENDPOINT_BLOG="${VITE_S3_ENDPOINT_BLOG:-}"
VITE_S3_BUCKET_BLOG="${VITE_S3_BUCKET_BLOG:-}"
# =============================================================================
# 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: image-name)"
echo " CONTAINER_IMAGE_TAG Image tag (default: latest)"
echo " VITE_S3_ENDPOINT_BLOG S3 endpoint for blog images"
echo " VITE_S3_BUCKET_BLOG S3 bucket for blog images"
echo ""
echo "Examples:"
echo " $0 build"
echo " $0 push"
echo " CONTAINER_IMAGE_TAG=v1.0.0 $0 build"
}
# Build Docker image
build_image() {
# Construct the full image name with registry, namespace, name, and tag
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 ""
# Prepare build args for S3 configuration
BUILD_ARGS=""
if [ -n "${VITE_S3_ENDPOINT_BLOG}" ]; then
BUILD_ARGS="${BUILD_ARGS} --build-arg VITE_S3_ENDPOINT_BLOG=${VITE_S3_ENDPOINT_BLOG}"
echo "S3 Endpoint (Blog): ${VITE_S3_ENDPOINT_BLOG}"
fi
if [ -n "${VITE_S3_BUCKET_BLOG}" ]; then
BUILD_ARGS="${BUILD_ARGS} --build-arg VITE_S3_BUCKET_BLOG=${VITE_S3_BUCKET_BLOG}"
echo "S3 Bucket (Blog): ${VITE_S3_BUCKET_BLOG}"
fi
echo ""
# Build the Docker image using Dockerfile in current directory
docker build ${BUILD_ARGS} -t "${FULL_IMAGE_NAME}" .
# Check if build was successful
if [ $? -eq 0 ]; then
echo ""
echo "✓ Build successful: ${FULL_IMAGE_NAME}"
else
echo ""
echo "✗ Build failed"
exit 1
fi
}
# Push Docker image to registry
push_image() {
# Construct the full image name
FULL_IMAGE_NAME="${CONTAINER_REGISTRY_URL}/${CONTAINER_REGISTRY_NAMESPACE}/${CONTAINER_IMAGE_NAME}:${CONTAINER_IMAGE_TAG}"
echo "=========================================="
echo "Pushing Docker Image to Registry"
echo "=========================================="
echo "Registry: ${CONTAINER_REGISTRY_URL}"
echo "Image: ${FULL_IMAGE_NAME}"
echo ""
# Login to the container registry
echo "Logging in to registry..."
echo "${CONTAINER_REGISTRY_PASSWORD}" | docker login "${CONTAINER_REGISTRY_URL}" \
-u "${CONTAINER_REGISTRY_USERNAME}" \
--password-stdin
# Check if login was successful
if [ $? -ne 0 ]; then
echo "✗ Login failed"
exit 1
fi
echo "✓ Login successful"
echo ""
# Push the image to registry
echo "Pushing image..."
docker push "${FULL_IMAGE_NAME}"
# Check if push was successful
if [ $? -eq 0 ]; then
echo ""
echo "✓ Push successful: ${FULL_IMAGE_NAME}"
else
echo ""
echo "✗ Push failed"
exit 1
fi
# Logout from registry
docker logout "${CONTAINER_REGISTRY_URL}"
}
# =============================================================================
# Main Script Logic
# =============================================================================
# If no arguments provided, show help
if [ $# -eq 0 ]; then
print_help
exit 0
fi
# Process command line arguments
case "$1" in
build)
build_image
;;
push)
push_image
;;
help|--help|-h)
print_help
;;
*)
echo "Error: Unknown option '$1'"
echo ""
print_help
exit 1
;;
esac