A partir de aquí crearemos un flujo CI/CD bajo un proyecto personal, para el caso del curso se usará https://github.com/juice-shop/juice-shop, una aplicación creada por la OWASP para ser lo más insegura posible, sin embargo, mas allá del análisis de seguridad, contiene la estructura necesaria para ser automatizada.
En el ámbito CI contendrá testing y un dockerfile para la compilación del proyecto mientras que en el lado CD soporta deploy a diferentes plataformas cloud como Heroku.
Puedes realizar un fork al repositorio https://github.com/JuanJTorres11/juice-shop-ga que a su vez es un fork del original, lo que ha cambiado es que se han reducido los Workflows y reconstruido para ser digeribles al estudiante. La sección de CI ha sido dividida en 2: ci-test y ci-build, de esta manera llevaremos un workflow entero para cada etapa.
El flujo de testing se puede encontrar en .github/workflows/ci-test.yml, este se activará cuando se haga un push o PR a la rama master, además seteará de manera global una variable de entorno ANGULAR_CLI_VERSION a 13.
name: "Flujo CI-Test"
run-name: "Flujo CI - Test"
on:
push:
branches: [master]
pull_request:
branches: [master]
env:
ANGULAR_CLI_VERSION: 13
Tendremos un total de 8 test, donde gran parte del material se repetirá gracias a que cada job se ejecuta en una máquina diferente, por lo que inicialmente indagaremos step a step que está pasando y posteriormente saltaremos a su lógica directa.
Un lint son las reglas de escritura que mantiene un lenguaje, por ejemplo, en Python se puede hacer identado con 2 o 4 espacios, o con la tecla tab. Todas estas reglas cambian según el entorno en el que estamos trabajando y debemos asegurarnos de que sean compatibles con nuestro proyecto, de esta manera, cada código nuevo que entre será formateado según estos linters.
Para todos los repos debemos hacer un checkout (descargarlo al worker del job) esto lo haremos con un action, sin embargo, para esta ocasión no haremos una notación de versión sino que usaremos un hash después del nombre del action, de esta manera apuntaremos al commit exacto que pretendemos usar y no tendremos problemas de versionamiento en el futuro.