122 lines
3.7 KiB
Bash
122 lines
3.7 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:-blog}"
|
|
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: blog)"
|
|
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" in
|
|
build)
|
|
build_image
|
|
exit $?
|
|
;;
|
|
push)
|
|
push_image
|
|
exit $?
|
|
;;
|
|
help|--help|-h|"")
|
|
print_help
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "Unknown option: $1"
|
|
echo ""
|
|
print_help
|
|
exit 1
|
|
;;
|
|
esac
|