Add Dockerfile and CI/CD script for building and pushing Docker images
This commit is contained in:
140
script/ci.sh
Normal file
140
script/ci.sh
Normal file
@@ -0,0 +1,140 @@
|
||||
#!/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}"
|
||||
|
||||
# =============================================================================
|
||||
# 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 ""
|
||||
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 ""
|
||||
|
||||
# Build the Docker image using Dockerfile in current directory
|
||||
docker build -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
|
||||
Reference in New Issue
Block a user