Commit 74790950 authored by guillecxb's avatar guillecxb
Browse files

new script for build and deploy

parent 68722063
Loading
Loading
Loading
Loading
+130 −0
Original line number Diff line number Diff line
#!/bin/bash

set -e  # Detener la ejecución si ocurre un error

# Función para manejar errores
handle_error() {
    echo "Error en el script. Línea: $1"
    exit 1
}

# Capturar errores y llamar a la función handle_error
trap 'handle_error $LINENO' ERR

# Pedir al usuario la URL del backend
read -p "Introduce la URL del backend (ej. http://localhost:8085): " BACKEND_URL

# Concatenar "/api" al final de la URL
API_URL="${BACKEND_URL}/api"

echo "La URL completa de la API será: $API_URL"

# Cambiar el valor de NEXT_PUBLIC_API_BASE_URL en el archivo capif_frontend/.env
ENV_FILE="capif_frontend/.env"

if [ -f "$ENV_FILE" ]; then
    # Reemplazar la línea correcta sin tocar las comentadas o con espacios alrededor del igual
    sed -i '' -E 's|^NEXT_PUBLIC_API_BASE_URL\s*=\s*.*$|NEXT_PUBLIC_API_BASE_URL="'"$API_URL"'"|g' "$ENV_FILE"
    echo "Variable NEXT_PUBLIC_API_BASE_URL actualizada en $ENV_FILE"
else
    echo "Error: No se encontró el archivo $ENV_FILE"
    exit 1
fi

# Obtener la última versión desde ECR usando AWS CLI
LAST_VERSION=$(aws ecr-public describe-image-tags --repository-name opencapif/backoffice-frontend --region us-east-1 --query 'imageTagDetails[*].imageTag' --output text | grep -Eo 'v3.1.[0-9]+' | sed 's/v3.1.//' | sort -n | tail -1)

if [ -z "$LAST_VERSION" ]; then
    echo "No se pudo obtener la última versión desde ECR. Verifica si el repositorio o las imágenes existen."
    exit 1
fi

# Incrementar la versión
NEW_VERSION=$((LAST_VERSION + 1))
echo "Nueva versión: v3.1.$NEW_VERSION"

# Cambiar directorio a capif_frontend
echo "Cambiando a directorio capif_frontend..."
cd capif_frontend || { echo "Error: no se pudo cambiar al directorio capif_frontend."; exit 1; }

# Ejecutar comandos de yarn
echo "Instalando dependencias con yarn..."
yarn install || { echo "Error en 'yarn install'."; exit 1; }

echo "Construyendo la aplicación con yarn..."
yarn build || { echo "Error en 'yarn build'."; exit 1; }

echo "Exportando la aplicación con yarn..."
yarn export || { echo "Error en 'yarn export'."; exit 1; }

# Volver al directorio principal
cd .. || { echo "Error: no se pudo volver al directorio principal."; exit 1; }

# Establecer la plataforma y construir la imagen Docker
echo "Construyendo la imagen Docker..."
DOCKER_DEFAULT_PLATFORM=linux/amd64 docker-compose build || { echo "Error en la construcción de la imagen Docker."; exit 1; }

# Pedir al usuario el ARN de MFA
read -p "Introduce el ID de cuenta de AWS (ej. 230672794366): " AWS_ACCOUNT_ID
read -p "Introduce el nombre del dispositivo MFA (ej. google_authenticator_phone): " MFA_DEVICE

MFA_ARN="arn:aws:iam::$AWS_ACCOUNT_ID:mfa/$MFA_DEVICE"

# Autenticación MFA con AWS para obtener un token temporal
read -p "Introduce el código MFA de 6 dígitos: " MFA_CODE

# Obtener un token temporal usando MFA
echo "Autenticando con AWS usando MFA..."
TEMP_CREDS=$(aws sts get-session-token --serial-number "$MFA_ARN" --token-code "$MFA_CODE" --output json)

if [ -z "$TEMP_CREDS" ]; then
    echo "Error: No se pudo obtener el token temporal de AWS. Verifica el código MFA."
    exit 1
fi

# Exportar credenciales temporales
export AWS_ACCESS_KEY_ID=$(echo "$TEMP_CREDS" | jq -r '.Credentials.AccessKeyId')
export AWS_SECRET_ACCESS_KEY=$(echo "$TEMP_CREDS" | jq -r '.Credentials.SecretAccessKey')
export AWS_SESSION_TOKEN=$(echo "$TEMP_CREDS" | jq -r '.Credentials.SessionToken')

# Autenticar Docker con Amazon ECR Public
aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws/o2v4a8t6 || { echo "Error en la autenticación con Docker."; exit 1; }

# Taggear la imagen con la nueva versión
echo "Etiquetando la imagen Docker..."
docker tag pesp_capif_backoffice_frontend_v2-frontend_microservice public.ecr.aws/o2v4a8t6/opencapif/backoffice-frontend:v3.1.$NEW_VERSION || { echo "Error al etiquetar la imagen Docker."; exit 1; }

# Push de la imagen con la nueva versión
echo "Pushing la nueva imagen a ECR..."
# docker push public.ecr.aws/o2v4a8t6/opencapif/backoffice-frontend:v3.1.$NEW_VERSION || { echo "Error al hacer push de la imagen Docker."; exit 1; }

# Actualizar el archivo helm/backoffice/values.yaml con el nuevo tag solo en la sección frontend
VALUES_FILE="helm/backoffice/values.yaml"

if [ -f "$VALUES_FILE" ]; then
    echo "Actualizando el archivo $VALUES_FILE con el nuevo tag..."

    # Reemplazar el tag del frontend buscando el repository y el tag justo después
    awk -v new_version="v3.1.$NEW_VERSION" '
    $0 ~ /repository: public.ecr.aws\/o2v4a8t6\/opencapif\/backoffice-frontend/ {
        found=1
    }
    found && /tag:/ {
        sub(/"v3.1.[0-9]+"/, "\"" new_version "\"")
        found=0
    }
    { print }
    ' "$VALUES_FILE" > "$VALUES_FILE.tmp" && mv "$VALUES_FILE.tmp" "$VALUES_FILE"

    echo "Archivo $VALUES_FILE actualizado con el nuevo tag v3.1.$NEW_VERSION"
else
    echo "Error: No se encontró el archivo $VALUES_FILE"
    exit 1
fi

# Ejecutar el comando Helm para actualizar la instalación
echo "Ejecutando helm upgrade..."
# helm upgrade --install -n backoffice backoffice helm/backoffice --create-namespace || { echo "Error en el comando Helm."; exit 1; }

# Mostrar la nueva versión
echo "Nueva imagen subida y helm upgrade ejecutado correctamente: public.ecr.aws/o2v4a8t6/opencapif/backoffice-frontend:v3.1.$NEW_VERSION"
+0 −2
Original line number Diff line number Diff line
@@ -6,7 +6,6 @@ backend:
  image:
    repository: public.ecr.aws/o2v4a8t6/opencapif/backoffice-backend
    pullPolicy: Always
    # Overrides the image tag whose default is the chart appVersion.
    tag: "v3.1.197"

  env:
@@ -108,7 +107,6 @@ frontend:
  image:
    repository: public.ecr.aws/o2v4a8t6/opencapif/backoffice-frontend
    pullPolicy: Always
    # Overrides the image tag whose default is the chart appVersion.
    tag: "v3.1.104"

  env: