Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
ada:howto:sicoferp:factory:new-migracion-sicoferp:front:iac [2024/07/04 14:30] 192.168.177.98 |
ada:howto:sicoferp:factory:new-migracion-sicoferp:front:iac [2024/08/13 14:26] (actual) 192.168.177.33 |
||
---|---|---|---|
Línea 28: | Línea 28: | ||
**Al hacer Docker Build se ejecuta la siguiente receta: | **Al hacer Docker Build se ejecuta la siguiente receta: | ||
** | ** | ||
+ | |||
+ | <code> | ||
+ | |||
+ | # Usa una imagen base de Node.js | ||
+ | FROM node:20-alpine AS build-step | ||
+ | |||
+ | # Establecer el límite de memoria para Node.js | ||
+ | ENV NODE_OPTIONS=--max_old_space_size=4096 | ||
+ | |||
+ | # Variable de entorno que define el ambiente | ||
+ | ARG TYPE | ||
+ | |||
+ | # Crea un directorio /app en la imagen | ||
+ | RUN mkdir -p /app | ||
+ | |||
+ | # Establece el directorio de trabajo | ||
+ | WORKDIR /app | ||
+ | |||
+ | # Copia los archivos de tu proyecto al directorio de trabajo | ||
+ | COPY package.json /app | ||
+ | |||
+ | # Instala las dependencias del proyecto | ||
+ | RUN npm install | ||
+ | |||
+ | # Copia el resto de los archivos de tu proyecto al directorio de trabajo | ||
+ | COPY . /app | ||
+ | |||
+ | # Construye la aplicación Angular | ||
+ | RUN npm run build:${TYPE} | ||
+ | |||
+ | # Configura la imagen de producción de Nginx | ||
+ | FROM nginx:alpine | ||
+ | |||
+ | # Copia los archivos generados de la compilación de Angular a la carpeta de Nginx | ||
+ | COPY --from=build-step /app/dist/mfsicof /usr/share/nginx/html | ||
+ | |||
+ | # Expone el puerto 80 para que se pueda acceder a la aplicación desde el navegador | ||
+ | EXPOSE 80 | ||
+ | |||
+ | # Comando para iniciar Nginx cuando se ejecute el contenedor | ||
+ | CMD ["nginx", "-g", "daemon off;"] | ||
+ | |||
+ | </code> | ||
+ | |||
+ | |||
+ | **3) Crear proyecto en GitLab. | ||
+ | ** | ||
+ | |||
+ | Se crea un proyecto en GitLab con el siguiente repositorio: http://10.1.140.120/ada-microservices-ecosystem/frontends/mfsicof.git | ||
+ | |||
+ | Se crea un webhook para el frontend con la siguiente URL: | ||
+ | |||
+ | Para clonar el proyecto una vez tengas permisos de Git: | ||
+ | |||
+ | code git clone http://10.1.140.120/ada-microservices-ecosystem/frontends/mfsicof.git Para instalar el ambiente se recomienda consultar la guía de primeros pasos. | ||
+ | |||
+ | Se recomienda consultar la guía de flujo Git. | ||
+ | |||
+ | **4) Preparar Jenkins. | ||
+ | ** | ||
+ | |||
+ | Adicional a la configuración de contenedores para Jenkins es necesario instalar jq. | ||
+ | jq es una herramienta de línea de comandos para procesar JSON. Asegúrate de que esté instalada en el sistema donde Jenkins está ejecutando el script. | ||
+ | En sistemas basados en Debian/Ubuntu, puedes instalar jq con: | ||
+ | |||
+ | - sudo apt-get install jq | ||
+ | - Configurar el Script en Jenkins: | ||
+ | - Accede a la configuración del proyecto en Jenkins. | ||
+ | - En la sección “Build”, añade o edita el paso “Execute shell”. | ||
+ | - Copia y pega el script anterior en el campo de texto del shell. | ||
+ | - Guardar y Probar: | ||
+ | - Guarda la configuración del proyecto. | ||
+ | |||
+ | |||
+ | **5.1 Acceder a Jenkins: | ||
+ | ** | ||
+ | Inicia sesión en tu instancia de Jenkins. | ||
+ | |||
+ | **5.2 Crear un nuevo proyecto: | ||
+ | ** | ||
+ | Ve a "New Item". | ||
+ | Selecciona "Pipeline" y da un nombre a tu proyecto. | ||
+ | Haz clic en "OK". | ||
+ | |||
+ | **5.3 Configurar el repositorio Git: | ||
+ | |||
+ | **En la sección "Source Code Management", selecciona "Git". | ||
+ | Ingresa la URL de tu repositorio GitLab y las credenciales necesarias. | ||
+ | |||
+ | **5.4 Configurar el webhook de GitLab:** | ||
+ | |||
+ | * En GitLab, ve a tu proyecto. | ||
+ | * Navega a "Settings" > "Webhooks". | ||
+ | * Añade una nueva URL de webhook apuntando a tu Jenkins. | ||
+ | * Selecciona los eventos que deseas que disparen el webhook, como "Push events". | ||
+ | |||
+ | |||
+ | **5.5 Añadir pasos de ejecución shell del pipeline** | ||
+ | |||
<code> | <code> | ||
Línea 130: | Línea 229: | ||
export DOCKER_HOST=${env.DOCKER_HOST_URI} | export DOCKER_HOST=${env.DOCKER_HOST_URI} | ||
if [ \$(docker ps -aq -f name=${env.CONTAINER_NAME}) ]; then | if [ \$(docker ps -aq -f name=${env.CONTAINER_NAME}) ]; then | ||
- | docker stop ${env.CONTAINER_NAME} | + | docker stop ${env.CONTAINER_NAME} || true |
- | docker rm -fv ${env.CONTAINER_NAME} | + | docker rm -fv ${env.CONTAINER_NAME} || true |
fi | fi | ||
docker run -d -p 8095:80 --name ${env.CONTAINER_NAME} ${env.REPOSITORY_NAME}:latest | docker run -d -p 8095:80 --name ${env.CONTAINER_NAME} ${env.REPOSITORY_NAME}:latest | ||
Línea 164: | Línea 263: | ||
} | } | ||
delete_local_branches develop qa pre-production | delete_local_branches develop qa pre-production | ||
+ | | ||
+ | # Re-crear la rama master desde el remoto | ||
+ | git fetch origin master:master | ||
+ | git checkout master | ||
''' | ''' | ||
| | ||
Línea 208: | Línea 311: | ||
if (branchWarningMessage != 0) { | if (branchWarningMessage != 0) { | ||
echo "Agrego mensaje advertencia." | echo "Agrego mensaje advertencia." | ||
- | warningMessage += "Advertencia: La versión la rama ${branch} es superior a la versión de master. No se realizará el merge en dicha rama.\n" | + | warningMessage += "Advertencia: La versión de la rama ${branch} es superior a la versión de master. No se realizará el merge en dicha rama.\n" |
echo "Mostrar mensaje : (${warningMessage})" | echo "Mostrar mensaje : (${warningMessage})" | ||
} | } | ||
Línea 287: | Línea 390: | ||
} | } | ||
} | } | ||
+ | |||
</code> | </code> | ||
+ | Activar esta configuración en el pipeline | ||
+ | {{:ada:howto:sicoferp:factory:new-migracion-sicoferp:front:opcion.png?800|}} | ||
- | **3) Crear proyecto en GitLab. | ||
- | ** | ||
- | |||
- | Se crea un proyecto en GitLab con el siguiente repositorio: http://10.1.140.120/ada-microservices-ecosystem/frontends/mfsicof.git | ||
- | |||
- | Se crea un webhook para el frontend con la siguiente URL: | ||
- | |||
- | Para clonar el proyecto una vez tengas permisos de Git: | ||
- | |||
- | code git clone http://10.1.140.120/ada-microservices-ecosystem/frontends/mfsicof.git Para instalar el ambiente se recomienda consultar la guía de primeros pasos. | ||
- | |||
- | Se recomienda consultar la guía de flujo Git. | ||
- | |||
- | **4) Preparar Jenkins. | ||
- | ** | ||
- | |||
- | Adicional a la configuración de contenedores para Jenkins es necesario instalar jq. | ||
- | jq es una herramienta de línea de comandos para procesar JSON. Asegúrate de que esté instalada en el sistema donde Jenkins está ejecutando el script. | ||
- | En sistemas basados en Debian/Ubuntu, puedes instalar jq con: | ||
- | |||
- | - sudo apt-get install jq | ||
- | - Configurar el Script en Jenkins: | ||
- | - Accede a la configuración del proyecto en Jenkins. | ||
- | - En la sección “Build”, añade o edita el paso “Execute shell”. | ||
- | - Copia y pega el script anterior en el campo de texto del shell. | ||
- | - Guardar y Probar: | ||
- | - Guarda la configuración del proyecto. | ||
- | |||
- | |||
- | **5.1 Acceder a Jenkins: | ||
- | ** | ||
- | Inicia sesión en tu instancia de Jenkins. | ||
- | |||
- | **5.2 Crear un nuevo proyecto: | ||
- | ** | ||
- | Ve a "New Item". | ||
- | Selecciona "Freestyle project" y da un nombre a tu proyecto. | ||
- | Haz clic en "OK". | ||
- | |||
- | **5.3 Configurar el repositorio Git: | ||
- | |||
- | **En la sección "Source Code Management", selecciona "Git". | ||
- | Ingresa la URL de tu repositorio GitLab y las credenciales necesarias. | ||
- | |||
- | **5.4 Configurar el webhook de GitLab:** | ||
- | |||
- | * En GitLab, ve a tu proyecto. | ||
- | * Navega a "Settings" > "Webhooks". | ||
- | * Añade una nueva URL de webhook apuntando a tu Jenkins (e.g., //http://your-jenkins-url/gitlab-webhook//). | ||
- | * Selecciona los eventos que deseas que disparen el webhook, como "Push events". | ||
- | |||
- | |||
- | **5.5 Añadir un paso de ejecución de shell:** | ||
- | |||
- | |||
- | En la sección "Build", haz clic en "Add build step" y selecciona "Execute shell". Copia y pega el siguiente script. | ||
- | |||
- | |||
- | |||
- | # Definir la URI del host Docker | ||
- | |||
- | DOCKER_HOST_URI="tcp://172.17.0.1:2375" | ||
- | |||
- | # Exportar la variable DOCKER_HOST | ||
- | |||
- | export DOCKER_HOST=$DOCKER_HOST_URI | ||
- | |||
- | # Extraer la versión y el nombre del archivo package.json | ||
- | |||
- | TAG_NAME=$(jq -r '.version' package.json) | ||
- | NAME=$(jq -r '.name' package.json) | ||
- | |||
- | # Modificar el nombre para insertar un guion después de 'mf' | ||
- | |||
- | CONTAINER_NAME=$(echo $NAME | sed 's/^mf/mf-/') | ||
- | |||
- | # Quitar el guion del nombre del repositorio | ||
- | |||
- | REPOSITORY_NAME="ecosystemuser/${NAME}" | ||
- | |||
- | # Imprimir los nombres para visualización | ||
- | |||
- | echo "REPOSITORY_NAME: $REPOSITORY_NAME" | ||
- | echo "CONTAINER_NAME: $CONTAINER_NAME" | ||
- | |||
- | # Construir la imagen Docker con el argumento de construcción | ||
- | |||
- | docker build --no-cache --build-arg TYPE=prod -t $REPOSITORY_NAME:$TAG_NAME . | ||
- | |||
- | # Etiquetar la imagen con latest | ||
- | |||
- | docker tag $REPOSITORY_NAME:$TAG_NAME $REPOSITORY_NAME:latest | ||
- | |||
- | # Empujar la imagen con la etiqueta latest a Docker Hub | ||
- | |||
- | docker push $REPOSITORY_NAME:$TAG_NAME | ||
- | docker push $REPOSITORY_NAME:latest | ||
- | |||
- | if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then | ||
- | docker stop $CONTAINER_NAME | ||
- | docker rm -fv $CONTAINER_NAME | ||
- | fi | ||
- | |||
- | # Ejecutar el nuevo contenedor con la imagen "latest" | ||
- | docker run -d -p 8095:80 --name $CONTAINER_NAME $REPOSITORY_NAME:latest | + | **5.6 Una vez configurado** |
+ | Probar el pipeline si funciona correctamente, replicar los webhook para cada ambiente. | ||