Automatiza con confianza: aquí verás cómo llevar una app de Angular a GitLab CI paso a paso, desde el flujo con issue y merge request hasta la configuración de Chrome Headless y un pipeline funcional con artifacts y cache. Sin trucos, solo lo esencial que se implementó.
¿Cómo iniciar el flujo con issue y merge request en GitLab?
Para asegurar trazabilidad y colaboración, se comienza creando un issue y luego un merge request que genera el branch de trabajo. Así cada cambio queda vinculado a una tarea clara.
¿Qué datos clave define el issue de automatización?
Título: “Generar integración con GitLab CI”.
Archivo a crear: .gitlab-ci.yml.
Milestone: 1.
Label: Infrastructure.
Peso: 5.
Acción: Submit para registrar y avanzar.
¿Cómo crear el merge request y el branch de trabajo?
Generar el merge request desde el issue.
Se crea el branch “5, Generar integración con GitLab CI”.
Beneficio: un espacio aislado para cambios, listo para revisión.
¿Cómo preparar la consola y verificar el branch?
Limpiar consola y cambiar a Master.
Ejecutar: git pull para traer cambios remotos.
Crear y ligar el nuevo branch al remoto.
Verificar que estás en el branch correcto antes de editar.
¿Cómo adaptar los tests de Angular a Chrome Headless en CI?
En Continuous Integration no hay interfaz gráfica. Por eso se ejecutan los tests en Chrome Headless con un custom launcher “sin sandbox”. Esto evita fallas al correr en contenedores Linux.
¿Qué cambios aplicar en Karma con custom launchers?
Cambiar el navegador por defecto a ChromeHeadlessNoSandbox.
Declarar un custom launcher con base en ChromeHeadless y flag --no-sandbox.
¿Cómo definir el script npm test:ci con watch false?
Mantener el script de pruebas normal.
Añadir un nuevo script para CI que ejecute una sola vez y use el navegador correcto.
{"scripts":{"test":"ng test","test:ci":"ng test --watch=false --browsers=ChromeHeadlessNoSandbox"}}
Opcional: agregar bandera de Code Coverage si se requiere.
¿Qué verificación rápida asegura que los tests corren?
Ejecutar: npm run test:ci.
Si falla por nombre del navegador, validar coincidencia exacta: ChromeHeadlessNoSandbox. Corregir y volver a correr hasta ver los tests pasar.
¿Cómo escribir .gitlab-ci.yml con stages, artifacts y tests?
El objetivo es instalar dependencias, compartirlas entre jobs y ejecutar tests en Chrome Headless dentro del pipeline. Se usan dos stages: install y test.
¿Qué imagen y stages usa el pipeline?
Imagen base: Node 11.1.0.
Stages: install y test.
image: node:11.1.0
stages:- install
- test
¿Cómo instalar dependencias y compartir node_modules con artifacts y cache?
Job “Install dependencies”: corre npm install.
Exporta artifacts de node_modules con expiración de 1 hora.
Activa cache de node_modules para acelerar builds.
A continuacion le paso las indicaciones para tener el mismo proyecto que se utiliza en el curso:
1. Descarga Node.js preferentemente la version estable. **Link **-> . La version que se publica el comentario es la version 10.15.3 LTS.
2. Para verificar si tiene instalado Node.js, ejecute este comando en su terminal node -v y para confirmar que tiene npm instalado, puede ejecutar este comando en su terminal: npm -v
3. Descargar Angular, ejecute este comando en su terminal npm install -g @angular/cli. La version que se descarga desde que se publica el comentario es la version 7.3.8.
4. Crear el proyecto Angular, ejecute este comando en su terminal ng new ProyectoGitlabCurso. Cabe aclara que el nombre del proyecto (ProyectoGitlabCurso) pueden cambiarlo a su gusto.
5. Abrir el proyecto con un editor de codigo a su gusto y modificar el archivo karma.conf.js (ubicado en la carpeta /src) la siguiente porcion de codigo:
Precisamente son los temas que aburren con la elaboración de contenidos de cursos, de repente en medio de un curso aparece contenido como éste que por ejemplo en mi caso me deja completamente perdido. Igual pasa en otros cursos.
David, tengo una duda, cuando generas el archivo .gitlab-ci.yml y lo inicializas con la etiqueta image. Eso quiere decir literal que gitlab ci generará una imagen de docker?
Saludos, lo que significa es que el ejecutor que se lanzará utilizará la imagen especificada para realizar los stage que hayas configurado, en lo personal, con proyectos grandes me gusta utilizar:
image: docker:latest
para el documento porque en cada stage puedes sobre escribir esta imagen por una específica.
Te dejo un ejemplo, el general utiliza la imagen docker:latest pero para los stage utiliza la imagen gradle:alpine
En las versiones más recientes de Angular, específicamente a partir de la versión 15, el archivo karma.conf.js ya no se genera por defecto al crear un nuevo proyecto. Esto se debe a que Angular CLI ahora construye la configuración completa de Karma en memoria, basándose en las opciones especificadas en el archivo angular.json.
Angular
Para personalizar la configuración de Karma, puedes generar manualmente el archivo karma.conf.js ejecutando el siguiente comando en la raíz de tu proyecto:
Alguien sabe donde podria aprender mas sobre los runners y la configuracion de los pipelines? Quiero hacer un pipeline para desplegar una app de .Net core en staging
buenas tardes.
Alguien me podria dar soporte a este problema que se me esta presentando cuando gitlab realiza los test
Runningwith gitlab-runner 13.0.0-rc2(926834bc) on docker-auto-scale 72989761Preparing the "docker+machine" executor
00:42UsingDocker executor with image node:12.13.1...Pulling docker image node:12.13.1...Using docker image sha256:7be6a8478f5f667ef8eef2c29dbd55a5132243755f56eb17d2260592a1eb3c1f fornode:12.13.1...Preparing environment
00:05Running on runner-72989761-project-18759178-concurrent-0 via runner-72989761-srm-1590397645-7b821558...Getting source fromGit repository
00:01 $ eval "$CI_PRE_CLONE_SCRIPT"Fetching changes with git depth set to 50...Initialized empty Git repository in/builds/factox/pro-dep/.git/Created fresh repository.From https://gitlab.com/factox/pro-dep
*[newref] refs/pipelines/149264851-> refs/pipelines/149264851*[newbranch]5-generar-integracion-con-gitlab-ci -> origin/5-generar-integracion-con-gitlab-ci
Checking out 3b581168 as5-generar-integracion-con-gitlab-ci...SkippingGit submodules setup
Restoring cache
00:02Downloading artifacts
00:17Downloading artifacts for install-dependencies(565985262)...Downloading artifacts from coordinator... ok id=565985262 responseStatus=200OK token=QzUuE-fR
Running before_script and script
01:51 $ apt-get update && apt-get install -y apt-transport-https
Ign:1http://deb.debian.org/debian stretch InReleaseGet:2http://security.debian.org/debian-security stretch/updates InRelease[94.3 kB]Get:3http://deb.debian.org/debian stretch-updates InRelease[91.0 kB]Get:4http://deb.debian.org/debian stretch Release[118 kB]Get:5http://deb.debian.org/debian stretch Release.gpg[2410B]Get:6http://security.debian.org/debian-security stretch/updates/main amd64 Packages[527 kB]Get:7http://deb.debian.org/debian stretch-updates/main amd64 Packages[27.9 kB]Get:8http://deb.debian.org/debian stretch/main amd64 Packages[7083 kB]Fetched7944 kB in1s(4397 kB/s)Readingpackage lists...Readingpackage lists...Building dependency tree...Reading state information...The following NEW packages will be installed: apt-transport-https
0 upgraded,1 newly installed,0 to remove and 44 not upgraded.Need to get171 kB of archives.Afterthis operation,243 kB of additional disk space will be used.Get:1http://security.debian.org/debian-security stretch/updates/main amd64 apt-transport-https amd64 1.4.10[171 kB]debconf: delaying package configuration, since apt-utils is not installed
Fetched171 kB in0s(2443 kB/s)Selecting previously unselected package apt-transport-https.(Reading database ...29962 files and directories currently installed.)Preparing to unpack .../apt-transport-https_1.4.10_amd64.deb...Unpacking apt-transport-https(1.4.10)...Setting up apt-transport-https(1.4.10)... $ wget -q -O- https://dl-ssl.google.com/linux/linux_signing_key.pub| apt-key add -Warning: apt-key output should not be parsed(stdout is not a terminal)OK $ sh -c 'echo "deb https://dl.google.com/linux/chrome/deb/stable main" >> /etc/apt/sources.list.d/google-chrome.list' $ apt-get update && apt-get install -y google-chrome-stable
E:Malformed entry 1in list file /etc/apt/sources.list.d/google-chrome.list(Component)E:The list of sources could not be read.$ npm run test:ci
> proyect11@0.0.0test:ci /builds/factox/pro-dep
> ng test --watch=false--browsers=ChromeHeadlessNoSandboxCompiling @angular/core : es2015 as esm2015
Compiling @angular/core/testing : es2015 as esm2015
Compiling @angular/common : es2015 as esm2015
Compiling @angular/platform-browser : es2015 as esm2015
Compiling @angular/platform-browser-dynamic : es2015 as esm2015
Compiling @angular/platform-browser/testing : es2015 as esm2015
Compiling @angular/compiler/testing : es2015 as esm2015
Compiling @angular/platform-browser-dynamic/testing : es2015 as esm2015
Compiling @angular/common/testing : es2015 as esm2015
Compiling @angular/router : es2015 as esm2015
Compiling @angular/router/testing : es2015 as esm2015
2505202009:10:04.523:INFO[karma-server]:Karma v4.3.0 server started at http://0.0.0.0:9876/2505202009:10:04.526:INFO[launcher]:Launching browsers ChromeHeadlessNoSandboxwith concurrency unlimited
2505202009:10:04.534:INFO[launcher]:Starting browser ChromeHeadless2505202009:11:04.537:WARN[launcher]:ChromeHeadless have not captured in60000 ms, killing.2505202009:11:06.542:WARN[launcher]:ChromeHeadless was not killed in2000 ms, sending SIGKILL.2505202009:11:08.543:WARN[launcher]:ChromeHeadless was not killed by SIGKILLin2000 ms, continuing.npmERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! proyect11@0.0.0test:ci:`ng test --watch=false --browsers=ChromeHeadlessNoSandbox` npm ERR!Exit status 1 npm ERR! npm ERR!Failed at the proyect11@0.0.0test:ci script.npmERR!This is probably not a problem with npm.There is likely additional logging output above.npmERR!A complete log ofthis run can be found in: npm ERR!/root/.npm/_logs/2020-05-25T09_11_08_608Z-debug.logRunning after_script
00:01Uploading artifacts for failed job
00:02ERROR:Job failed: exit code 1```
tambien puedes instalar la extencion de vscode llamada gitlab.gitlab-workflow:
Una vez instalada puedes usar el command palette y ejecutar el comando
GitLab: Validate GitLab CI config
y automaticamente validara tu archivo .gitlab-ci.yml