228 lines
5.7 KiB
Bash
Executable File
228 lines
5.7 KiB
Bash
Executable File
undefined#!/bin/bash
|
|
|
|
set -Eeuo pipefail
|
|
|
|
SECONDS=0
|
|
|
|
########################################
|
|
# Error Handling
|
|
########################################
|
|
|
|
trap 'echo "ERROR: Script failed at line ${LINENO}. Command: ${BASH_COMMAND}" >&2' ERR
|
|
|
|
########################################
|
|
# Project Identity
|
|
# NOTE: Fill these in per-project. Do not
|
|
# hardcode values here that other projects
|
|
# also use, to avoid collisions.
|
|
########################################
|
|
|
|
PRJ_NAME="mytest16sep01-frontend-f"
|
|
|
|
IMAGE_PROJECT_NAME="${PRJ_NAME}"
|
|
|
|
########################################
|
|
# Gitea Source Repository
|
|
########################################
|
|
|
|
GITEA_USER="risadmin_prod"
|
|
GITEA_PASS="adminprod1234"
|
|
GITEA_URL="http://157.66.191.31:3000"
|
|
GITEA_URL="${GITEA_URL#http://}"
|
|
GITEA_ORG="risadmin_prod"
|
|
GITEA_EMAIL="ganeshk@dekatc.com"
|
|
|
|
REPO_NAME="mytest16sep01"
|
|
GIT_BRANCH=main
|
|
|
|
########################################
|
|
# Module Paths (per project, inside -b / -f dirs)
|
|
########################################
|
|
|
|
JAR_NAME=app-1.0.0.jar
|
|
BACKEND_SUBPATH="<BACKEND_SUBPATH>" # e.g. authsec_springboot/backend
|
|
FRONTEND_SUBPATH="<FRONTEND_SUBPATH>" # e.g. authsec_flutter_new/frontend/flutter_new
|
|
APK_NAME=app-release.apk
|
|
|
|
########################################
|
|
# Docker Registry
|
|
########################################
|
|
|
|
DOCKER_USER=risadmin_prod
|
|
DOCKER_PASS=adminprod1234
|
|
DOCKER_URL=157.66.191.31:3000
|
|
|
|
DOCKER_TAG=1.0
|
|
|
|
########################################
|
|
# Build Path
|
|
########################################
|
|
|
|
PATH_DIR="/data/66086_1789619806112/sureops"
|
|
|
|
########################################
|
|
# Image Names
|
|
########################################
|
|
|
|
IMAGE_NAME="${DOCKER_URL}/${DOCKER_USER}/${IMAGE_PROJECT_NAME}:${DOCKER_TAG}"
|
|
LATEST_IMAGE="${DOCKER_URL}/${DOCKER_USER}/${IMAGE_PROJECT_NAME}:latest"
|
|
|
|
########################################
|
|
# Display Configuration
|
|
########################################
|
|
|
|
echo "=========================================="
|
|
echo " SINGLE CONTAINER BUILD (Flutter + SpringBoot + MySQL)"
|
|
echo "=========================================="
|
|
|
|
echo "Project Name : ${PRJ_NAME}"
|
|
echo "Container Name : ${IMAGE_PROJECT_NAME}"
|
|
echo "Repository : ${GITEA_ORG}/${REPO_NAME}"
|
|
echo "Branch : ${GIT_BRANCH}"
|
|
echo "Docker Image : ${IMAGE_NAME}"
|
|
echo "Latest Image : ${LATEST_IMAGE}"
|
|
echo "Build Path : ${PATH_DIR}"
|
|
|
|
echo "=========================================="
|
|
|
|
########################################
|
|
# Validate Configuration
|
|
########################################
|
|
|
|
echo "Validating configuration..."
|
|
|
|
REQUIRED_VARIABLES=(
|
|
"PRJ_NAME"
|
|
"GITEA_USER"
|
|
"GITEA_PASS"
|
|
"GITEA_URL"
|
|
"GITEA_ORG"
|
|
"REPO_NAME"
|
|
"GIT_BRANCH"
|
|
"JAR_NAME"
|
|
"BACKEND_SUBPATH"
|
|
"FRONTEND_SUBPATH"
|
|
"DOCKER_USER"
|
|
"DOCKER_PASS"
|
|
"DOCKER_URL"
|
|
"DOCKER_TAG"
|
|
"PATH_DIR"
|
|
)
|
|
|
|
for VARIABLE in "${REQUIRED_VARIABLES[@]}"; do
|
|
VALUE="${!VARIABLE:-}"
|
|
|
|
if [[ -z "${VALUE}" ]]; then
|
|
echo "ERROR: Required variable '${VARIABLE}' is empty."
|
|
exit 1
|
|
fi
|
|
|
|
if [[ "${VALUE}" == "<"*">" ]]; then
|
|
echo "ERROR: Variable '${VARIABLE}' still contains placeholder value: ${VALUE}"
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
echo "Configuration validation successful."
|
|
|
|
########################################
|
|
# Check Docker
|
|
########################################
|
|
|
|
if ! command -v docker >/dev/null 2>&1; then
|
|
echo "ERROR: Docker is not installed or not available in PATH."
|
|
exit 1
|
|
fi
|
|
|
|
if ! docker info >/dev/null 2>&1; then
|
|
echo "ERROR: Docker daemon is not running or current user has no permission."
|
|
exit 1
|
|
fi
|
|
|
|
########################################
|
|
# Change Directory
|
|
########################################
|
|
|
|
if [[ ! -d "${PATH_DIR}" ]]; then
|
|
echo "ERROR: Directory not found: ${PATH_DIR}"
|
|
exit 1
|
|
fi
|
|
|
|
cd "${PATH_DIR}"
|
|
|
|
########################################
|
|
# Build Docker Image
|
|
########################################
|
|
|
|
echo "=========================================="
|
|
echo " BUILDING DOCKER IMAGE"
|
|
echo "=========================================="
|
|
|
|
docker build \
|
|
--no-cache \
|
|
--build-arg "GITEA_USER=${GITEA_USER}" \
|
|
--build-arg "GITEA_PASS=${GITEA_PASS}" \
|
|
--build-arg "GITEA_URL=${GITEA_URL}" \
|
|
--build-arg "GITEA_ORG=${GITEA_ORG}" \
|
|
--build-arg "REPO_NAME=${REPO_NAME}" \
|
|
--build-arg "GIT_BRANCH=${GIT_BRANCH}" \
|
|
--build-arg "JAR_NAME=${JAR_NAME}" \
|
|
--build-arg "BACKEND_SUBPATH=${BACKEND_SUBPATH}" \
|
|
--build-arg "FRONTEND_SUBPATH=${FRONTEND_SUBPATH}" \
|
|
--build-arg "APK_NAME=${APK_NAME}" \
|
|
-t "${IMAGE_NAME}" \
|
|
.
|
|
|
|
echo "Docker build successful."
|
|
|
|
########################################
|
|
# Verify Image
|
|
########################################
|
|
|
|
if ! docker image inspect "${IMAGE_NAME}" >/dev/null 2>&1; then
|
|
echo "ERROR: Docker image was not created: ${IMAGE_NAME}"
|
|
exit 1
|
|
fi
|
|
|
|
docker images "${IMAGE_NAME}"
|
|
|
|
########################################
|
|
# Docker Registry Login + Push
|
|
########################################
|
|
|
|
if ! echo "${DOCKER_PASS}" | docker login \
|
|
--username "${DOCKER_USER}" \
|
|
--password-stdin \
|
|
"${DOCKER_URL}"; then
|
|
|
|
echo "ERROR: Docker registry login failed."
|
|
exit 1
|
|
fi
|
|
|
|
docker tag "${IMAGE_NAME}" "${LATEST_IMAGE}"
|
|
|
|
docker push "${IMAGE_NAME}"
|
|
docker push "${LATEST_IMAGE}"
|
|
|
|
docker logout "${DOCKER_URL}" || true
|
|
|
|
########################################
|
|
# Deployment Note
|
|
#
|
|
# DO NOT RUN CONTAINER HERE.
|
|
# Deployment service will perform:
|
|
# docker pull / docker stop / docker rm / docker run
|
|
########################################
|
|
|
|
echo "=========================================="
|
|
echo " BUILD AND PUSH COMPLETED"
|
|
echo "=========================================="
|
|
echo "Project Name : ${PRJ_NAME}"
|
|
echo "Image : ${IMAGE_NAME}"
|
|
echo "Latest Image : ${LATEST_IMAGE}"
|
|
|
|
DURATION="${SECONDS}"
|
|
echo "Total time taken: $((DURATION / 60)) min $((DURATION % 60)) sec"
|
|
|
|
exit 0
|