Este taller, a través de un proyecto de Python, busca mostrar cómo se puede implementar un pipeline de CI/CD utilizando GitLab CI/CD.
- Tener una cuenta en GitLab.
- Tener un proyecto en GitLab.
- Tener instalado Git.
-
Para empezar, haz un fork de este repositorio en tu cuenta de GitLab. Si ya has hecho fork anteriormente, puedes actualizar tu repositorio de la siguiente manera:
-
Desde la UI: https://docs.gitlab.com/ee/user/project/repository/forking_workflow.html#from-the-ui
-
O bien por linea de comandos:
git remote add upstream https://<repositorio-workshop>/workshop-cicd.git git fetch upstream git pull upstream master
-
-
El siguiente paso es clonar o actualizar tu repositorio en tu máquina local. Para ello, ejecuta los siguientes comandos en tu terminal:
- Clonar repositorio:
git clone https://<tu-repositorio>/workshop-cicd.git cd workshop-cicd
- O bien actualizar repositorio:
git fetch origin git pull origin main
- Clonar repositorio:
- Abre el proyecto en GitLab.
- Haz clic en
CI/CD
en el menú lateral. - Haz clic en
Run Pipeline
. - Selecciona la rama
main
y haz clic enRun Pipeline
. - Espera a que el pipeline se ejecute.
Este pipeline inicial ejecutará la siguiente etapa: - Test
-
Personaliza el pipeline:
- Abre el archivo
.gitlab-ci.yml
en tu editor de código favorito, por ejemplo: Visual Studio Code.
- Abre el archivo
-
Configura el stage "Static Analysis":
- Agrega un nuevo stage llamado "Static Analysis" antes del stage "Test".
stages: - Static Analysis - Test
- Agrega un nuevo job llamado "pylint" asociado al stage "Static Analysis"
pylint: stage: Static Analysis script: - echo "Running pylint..." - pylint -d C0301 -f parseable --reports=no main.py transform.py > pylint.log artifacts: paths: - pylint.log
- Este analisis estático del código se ejecutará en los archivos
main.py
ytransform.py
y guardará el resultado en un archivopylint.log
.
- Agrega un nuevo stage llamado "Static Analysis" antes del stage "Test".
-
Configura el job "coverage":
- Agrega un nuevo job llamado "coverage" asociado al stage "Test"
coverage: stage: Test script: - python -m coverage run test.py - python -m coverage xml -o coverage.xml coverage: '/TOTAL.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/' artifacts: reports: coverage_report: coverage_format: cobertura path: coverage.xml
- Este análisis de cobertura se ejecutará en el archivo
test.py
y guardará el resultado en un archivocoverage.xml
.
- Agrega un nuevo job llamado "coverage" asociado al stage "Test"
-
Configura el stage "Deploy":
- Agrega un nuevo stage llamado "Deploy" después del stage "Test".
stages: - Static Analysis - Test - Deploy
- Agrega un nuevo job llamado "deploy" asociado al stage "Deploy"
deploy: stage: Deploy script: - pip install build twine - python -m build - TWINE_PASSWORD=${CI_JOB_TOKEN} TWINE_USERNAME=gitlab-ci-token python -m twine upload --repository-url ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/pypi dist/* rules: - if: $CI_COMMIT_REF_NAME =~ /.*-v[0-9]+\.[0-9]+\.[0-9]+/ when: always
- Este despliegue se ejecutará en el pipeline si el nombre de la versión tiene el formato {nombre-de-la-versión}-vx.x.x (siendo x números).
- Crea un tag con el formato {nombre-de-la-versión}-vx.x.x y haz push al repositorio de ese tag.
git tag release-v1.0.0 git push origin release-v1.0.0
- Tambien funciona creando una rama con el formato {nombre-de-la-versión}-vx.x.x y haciendo push a esa rama.
git checkout -b release-v1.0.0 git push origin release-v1.0.0
- Este despliegue subirá el paquete a nuestro registro de paquetes de GitLab.
- Puedes revisar el paquete en
Deploy
->Package Registry
. - Puedes editar el nombre y versión del proyecto python en el archivo
pyproject.toml
y volver a ejecutar el pipeline para subir una nueva versión.
- Agrega un nuevo stage llamado "Deploy" después del stage "Test".