Configura un flujo CI/CD sólido en Angular con GitLab CI y GitLab Pages para publicar en producción de forma continua. Aquí verás cómo pasar de un commit a un sitio activo, usando stages de install, test, build y deploy, variables de ambiente, artifacts y ajustes de Angular como BASE_HREF para servir correctamente en Pages.
¿Cómo se prepara el flujo de trabajo en GitLab?
Comienza con una integración continua ya operando: cada commit detona un pipeline que ejecuta install y test. El objetivo es extenderlo para publicar automáticamente en GitLab Pages con un proceso claro de colaboración.
¿Qué roles cumplen issue y merge request?
Crear un issue: “Integrar con GitLab Pages”.
Asignarlo y describir: “desarrolla el código para integrar la app con GitLab Pages”.
Abrir un merge request y generar el branch de trabajo.
Trabajar en el branch y fusionar a master cuando esté listo.
¿Qué comandos de Git se usan?
git branch y git pull: obtener referencias remotas.
git checkout: cambiar al branch de trabajo.
git status: revisar cambios.
git add .: preparar archivos.
git commit -m: documentar el cambio.
git push: enviar al remoto con autenticación SSH y firma PGP.
¿Cómo se configura el pipeline de GitLab CI para Angular?
El archivo .gitlab-ci.yml ya incluye install y test. Se añaden dos stages: build y deploy, y los jobs correspondientes para construir y publicar la app estática.
stages:- install
- test
- build
- deploy
¿Qué hace el job de build en producción?
Declara una variable de ambiente para la configuración: production.
Define dependencies del job de instalación para reutilizar node_modules.
Ejecuta el script: npm run build.
Exporta artifacts del directorio dist con expiración de 1 hora.
Aplica optimizaciones de Angular para producción como tree shaking y código compacto.
Ejemplo del ajuste en package.json para usar la variable de ambiente en el build de Angular:
Se podría optimizar el pipeline, dentro del mismo agregar una variable BASE_HREF=/platzi-devops/ y dentro del package.json hacer uso de esa variable adicionando el flag —base-href
ng build —base-href=$BASE_HREF
Gracias por el aporte
Super Aporte!!!!!
Deberíamos crear un grupo de telegram para DevOps ya que no hay :/
¡Hola!
Seguro que si se lo propones al team@platzi.com podrán crear un grupo como los otros que hay para otras áreas de estudio.
¡Nunca pares de aprender! :gree
he configurado mi gitlab-ci para que haga deploy con firebase hosting. Quedo asi y solo hara deploy si hay cambios en master.
A los que le aparezca el error 404, solo deben resolver el WIP status y luego mergear a Master. Una vez que el merge termine y el pipeline cumpla su ciclo podràn ver la pàgina de deployment de Angular correctamente
En el caso que mi deploy sea en otro servidor como heroku, digital oceam, aws, azure, que cosas cambiaria ..?
Hola, eso se ve más adelante en el curso.
failed pipeline.
Todos mis pipelines me fallan y lo peor es que no sé porque si hago lo que dice el profe. Será que si tengo que meter mis datos bancarios??
Intenta entrando al log del pipeline y si hay algun error.
Lo mas probable es que si sea ingresar los datos bancarios, no hace mucho que gitlab agrego esa medida debido a que habia muchos usuarios que usaban el servicio para minar.
Hola, yo tambien tuve el mismo error y lo resolvi instalando en mi equipo un runner, el siguiente video me ayudo mucho: instalar runner
Adicionalmente si usas Windows debes instalar WSL2 y tambien docker.
Saludos espero que te sea de mucha ayuda.
Buenas ¿Se puede usar Gitlab pages para deployar APIs (Backend)?
no, solo funciona para archivos estaticos
Gonzalo que alternativas son las que hay?
En el caso de tener un proyecto hecho en Angular 6,las configuraciones servirían exceptuando la variable "$BUILD_CONFIGURATION"?
Les ha pasado que al entrar a ver el log del job de install-dependencies se queda la pantalla cargando? No he podido ver ese log:
agrega el keyword. only en ese job y setealo en - branches
only:- branches
Puede ser que la pregunta sea temprano, pero ¿alguno a hecho un pipeline de este tipo pero a un servidor propio?
Tengo en el trabajo un gitlab community edition y algunos servidores windows server. Me gustaría poder automatizar el proceso de deployment, por lo menos, a testing. Hay un desarrollo donde se esta usando angular 9 y me gustaria desplegarlo mas automatizado.
Parece ser que le demora entre 15 minutos a 1 hora a gitlab dejar disponible el proyecto:
Cómo detalles importantes a tener en cuenta deben revisar que el "outputPath": "dist/my-gitlab-project" del archivo angular.json sea igual al path que ponen en - mv ./dist/my-gitlab-project/* ./public/ dentro del archivo .gitlab-ci.yml.
Parce muchas gracias, no encontraba el error hasta que revise el angular.json y tenía diferente el nombre.
Les ha pasado que al entrar a ver el log del job de install-dependencies se queda la pantalla cargando? No he podido ver ese log :(
En el job usa el keyword llamado only
my-job:satge: my-stage
only:- branches

Se usa una carpeta específica (ej: public/) para servir contenido
GitLab Pages publica automáticamente ese contenido
Cada cambio activa el despliegue
Ideal para sitios estáticos
Integra desarrollo y publicación en un solo flujo
🧠 Conceptos importantes
Build: proceso de generar archivos listos para producción
Deploy: publicación del sitio
Carpeta public/: ubicación de archivos a servir
Pipeline: flujo automatizado
Hosting estático: entrega de contenido sin backend
Idea clave:
Si automatizas el build y el deploy, publicar se vuelve automático.
🚀 Acciones inmediatas
Configurar pipeline para generar archivos del sitio
Definir carpeta public/ en el proyecto
Hacer commit y activar pipeline
Verificar despliegue en GitLab Pages
Iterar con cambios automáticos
💼 Aplicación profesional
En empresas: automatizar publicación de contenido
En equipos: reducir tareas manuales de despliegue
En proyectos: lanzar sitios rápidamente
En productos digitales: iterar páginas sin fricción
Impacto real: despliegue continuo sin esfuerzo manual.
🔥 Hacks para la comunidad
Mantén clara la estructura de build
Automatiza desde el primer deploy
Usa Pages para demos rápidas
Evita procesos manuales de publicación
Cada deploy automático ahorra tiempo
📝 Reflexión estratégica
El despliegue manual es una fricción innecesaria en equipos modernos.
Automatizarlo libera tiempo y reduce errores.
Los equipos que despliegan sin esfuerzo avanzan más rápido.
Me podrían decir donde esta esa carpeta dist? en el pipeline todo funciono menos lo de esa carpeta
el directorio dist es generado por el comando ng build que el job llamado build-app ejecuta.
si no te funciona talvez no estas creando el artifact para el siguiente stage lo consuma.
o quizas el siguiente este no hace pull de el, debes agregar el keyword llamado dependencies para que haga uso del artifact previamente creado
Mi codigo de .girlab-ci.yml en el job de pages, es el siguiente:
pages:stage: deploy
dependencies:- build-app
script:- mkdir public- mv ./dist/Morpheus/* ./public/
artifacts:
paths:
- public
environment:
name: production
only:
- branches
Al ejecutar el pipeline me genera el siguiente error en la imagen adjunta:
El error indica que el directorio o archivo no existe, alguien me podria ayudar por que se genera el error. Muchas Gracias de antemano.
¿Se puede usar Gitlab CI para deployar APIs (Backend)? Creo que no funcionaria de la misma manera para con Gitlab Pages o si? Que alternativa es la que hay?