Files
GestionIntegralWeb/.gitea/workflows/deploy.yml
dmolinari 3a0f0a4bf8
Some checks failed
Optimized Build and Deploy / remote-build-and-deploy (push) Failing after 17s
Fix. Se usa un repositorio de caché ficticio local que no requiere autenticación.
2025-06-20 11:58:39 -03:00

96 lines
3.8 KiB
YAML

name: Optimized Build and Deploy
on:
push:
branches:
- main
jobs:
remote-build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Run Optimized CI/CD Process on Host via SSH
run: |
set -e
# Configura SSH
apt-get update -qq && apt-get install -y openssh-client git
mkdir -p ~/.ssh
echo "${{ secrets.PROD_SERVER_SSH_KEY }}" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan -H ${{ secrets.PROD_SERVER_HOST }} >> ~/.ssh/known_hosts
# Ejecuta en el host remoto
ssh ${{ secrets.PROD_SERVER_USER }}@${{ secrets.PROD_SERVER_HOST }} << 'EOSSH'
set -e
echo "--- INICIO DEL DESPLIEGUE OPTIMIZADO ---"
# 1. Preparar entorno
TEMP_DIR=$(mktemp -d)
REPO_OWNER="dmolinari"
REPO_NAME="gestionintegralweb"
GITEA_REPO_PATH="/var/lib/docker/volumes/gitea-stack_gitea-data/_data/git/repositories/${REPO_OWNER}/${REPO_NAME}.git"
echo "Clonando repositorio desde: $GITEA_REPO_PATH ..."
git clone "$GITEA_REPO_PATH" "$TEMP_DIR"
cd "$TEMP_DIR"
git checkout "${{ gitea.sha }}"
# 2. Directorios de caché
KANIKO_CACHE_BACKEND="/kaniko_cache/backend"
KANIKO_CACHE_FRONTEND="/kaniko_cache/frontend"
mkdir -p "$KANIKO_CACHE_BACKEND" "$KANIKO_CACHE_FRONTEND"
chmod 777 "$KANIKO_CACHE_BACKEND" "$KANIKO_CACHE_FRONTEND"
# 3. Construcción paralela con Kaniko (con cache-repo local)
build_image() {
local context=$1
local dockerfile=$2
local cache_dir=$3
local image_name=$4
local tar_path=$5
docker run --rm \
-v "$TEMP_DIR":/workspace \
-v "$cache_dir":/cache \
gcr.io/kaniko-project/executor:v1.9.0 \
--context="/workspace/$context" \
--dockerfile="/workspace/$dockerfile" \
--cache=true \
--cache-dir=/cache \
--cache-repo=localhost:5000/cache \
--no-push \
--destination="$image_name" \
--tarPath="/workspace/$tar_path"
}
echo "Construyendo imágenes en paralelo..."
(build_image "." "Backend/GestionIntegral.Api/Dockerfile" "$KANIKO_CACHE_BACKEND" "gestionintegralweb-backend:latest" "backend.tar") &
(build_image "." "Frontend/Dockerfile" "$KANIKO_CACHE_FRONTEND" "gestionintegralweb-frontend:latest" "frontend.tar") &
wait
# 4. Cargar imágenes y etiquetar
echo "Cargando y etiquetando imágenes..."
docker load -i "$TEMP_DIR/backend.tar"
docker load -i "$TEMP_DIR/frontend.tar"
# Etiquetar para docker-compose
docker tag gestionintegralweb-backend:latest dmolinari/gestionintegralweb-backend:latest
docker tag gestionintegralweb-frontend:latest dmolinari/gestionintegralweb-frontend:latest
# 5. Despliegue con Docker Compose
cd /opt/gestion-integral
export DB_SA_PASSWORD='${{ secrets.DB_SA_PASSWORD_SECRET }}'
echo "Recreando servicios..."
docker compose up -d --force-recreate
# 6. Limpieza
echo "Realizando limpieza..."
rm -rf "$TEMP_DIR"
docker image prune -af --filter "until=24h"
echo "--- DESPLIEGUE COMPLETADO CON ÉXITO ---"
echo "Tiempo total: $(($SECONDS / 60)) minutos y $(($SECONDS % 60)) segundos"
EOSSH