factuges-document-signing-s.../scripts/build-docker.sh
2026-01-30 14:12:05 +01:00

141 lines
4.2 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
set -euo pipefail
SCRIPT_VERSION="0.0.3"
# =====================================================
# FACTUGES Document Signing Service Build Script
# -----------------------------------------------------
# Build + Subida a producción de la imagen Docker
# =====================================================
# Uso:
# ./build_docker.sh <company> [--load]
#
# =====================================================
# --- Configuración base ---
COMPANY=""
LOAD=false
# --- Validar que el primer argumento existe y no es un flag ---
if [[ $# -eq 0 || "$1" == --* ]]; then
echo "❌ ERROR: Falta el parámetro <company>"
echo "Uso: ./build_docker.sh <company> [--load]"
echo "Ejemplos:"
echo " ./build_docker.sh acme --load"
exit 1
fi
COMPANY="$1"
SSH_USER="rodax"
SSH_HOST="vps-2.rodax-software.com"
SSH_PORT="49152"
# Override por compañía específica
if [[ "$COMPANY" == "rodax" ]]; then
SSH_USER="rodax"
SSH_HOST="factuges.rodax-software.local"
SSH_PORT="22"
fi
# --- Parseo de flags ---
shift # quitamos el <company>, ahora solo quedan flags
for arg in "$@"; do
case "$arg" in
--load) LOAD=true ;;
*) echo "⚠️ Argumento desconocido: $arg" ;;
esac
done
# --- Paths base ---
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(realpath "${SCRIPT_DIR}/..")"
OUT_DIR="${PROJECT_DIR}/build/"
if [[ -z "$COMPANY" ]]; then
echo "❌ Error: debes indicar la compañía. Ejemplo: ./build_docker.sh acme [--load]"
exit 1
fi
if [[ $COMPANY =~ --.* ]]; then
echo "❌ Error: debes indicar la compañía. Ejemplo: ./build_docker.sh acme [--load]"
exit 1
fi
# --- Detectar nombre y versión de la API ---
IMAGE_NAME=$(node -p "require('${PROJECT_DIR}/setup.cfg').name" 2>/dev/null || echo "factuges-document-signing-service")
IMAGE_VERSION=$(node -p "require('${PROJECT_DIR}/setup.cfg').version" 2>/dev/null || echo "0.1.3")
PORT="8000" # valor por defecto
# --- 3. Etiquetas e información ---
DATE=$(date +'%Y%m%d-%H%M%S')
ISO_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
USER_NAME=$(whoami)
GIT_HASH=$(git -C "$PROJECT_DIR" rev-parse --short HEAD 2>/dev/null || echo "unknown")
GIT_BRANCH=$(git -C "$PROJECT_DIR" rev-parse --abbrev-ref HEAD 2>/dev/null || echo "unknown")
IMAGE_TAG_V="${IMAGE_NAME}:v${IMAGE_VERSION}"
IMAGE_TAG_LATEST="${IMAGE_NAME}:latest"
mkdir -p "$OUT_DIR"
rm -rf "${OUT_DIR:?}/"*
echo ""
echo "-------------------------------------------------------"
echo " FACTUGES Document Signing Service Build Script v${SCRIPT_VERSION}"
echo " Compañía: ${COMPANY}"
echo " Proyecto: ${IMAGE_NAME}"
echo " Versión: ${IMAGE_VERSION}"
echo " Puerto: ${PORT}"
echo " Etiquetas: ${IMAGE_TAG_V}, ${IMAGE_TAG_LATEST}"
echo " Dir. out: ${OUT_DIR}"
echo " Cargar: ${LOAD}"
echo "-------------------------------------------------------"
cd "${PROJECT_DIR}"
echo "🐳 Construyendo imagen Docker..."
docker build \
-t "${IMAGE_TAG_V}" -t "${IMAGE_TAG_LATEST}" \
--build-arg PORT="${PORT}" \
-f "${PROJECT_DIR}/Dockerfile" "${PROJECT_DIR}"
echo "✅ Imagen Docker construida correctamente"
TAR_FILE_V="${OUT_DIR}/${IMAGE_NAME}-v${IMAGE_VERSION}-${DATE}.tar"
echo "🐳 Guardando imagen Docker ${TAR_FILE_V} ..."
docker save "${IMAGE_TAG_V}" "${IMAGE_TAG_LATEST}" -o "${TAR_FILE_V}"
echo "📦 Imagen guardada:"
echo " ${TAR_FILE_V}"
if [[ "$LOAD" == true ]]; then
echo "📥 Cargando imagen en producción ${SSH_HOST}..."
scp -r -P "${SSH_PORT}" "${OUT_DIR}" "${SSH_USER}@${SSH_HOST}:/opt/factuges-document-signing-service/"
RESULT=$(ssh -p "${SSH_PORT}" "${SSH_USER}@${SSH_HOST}" \
"docker load -i /opt/factuges-document-signing-service/build/$(basename "${TAR_FILE_V}") && \
docker tag ${IMAGE_TAG_V} ${IMAGE_TAG_LATEST} " 2>&1)
echo "${RESULT}"
echo "✅ Imagen cargada en producción"
fi
# =====================================================
# 3⃣ Resumen
# =====================================================
echo "-------------------------------------------------------"
echo "🎯 Resultado final para '${COMPANY}'"
echo " 🐳 v${IMAGE_VERSION}${OUT_DIR}"
echo "🧩 Script version: ${SCRIPT_VERSION} - FIN"
echo "-------------------------------------------------------"
echo ""
echo ""
echo ""