Jobs
Un job pode facer cousas como:
- Compilar a túa aplicación.
- Executar tests.
- Despregar a aplicación web nun servidor.
- Executar scripts de análise de código...
- Xerar documentación.
Cada job defínese no ficheiro .gitlab-ci.yml cun nome único e inclúe varias opcións, sendo a máis importante script.
test_backend:
stage: test
script:
- echo "Iniciando tests..."
- pytest tests/
Neste caso:
test_backendé o nome do job.stagedi en que fase se executa (por exemplo:test).scriptcontén os comandos que executa norunner.
O funcionamento é o seguinte:
- Faise un
pushao repositorio. - GitLab le o
.gitlab-ci.yml. - Crea un pipeline con todos os jobs definidos.
- Cada job envíase a un runner (máquina virtual, contedor, etc.).
- O runner executa os comandos especificados en
script.
Imaxes
É posible (e adoita ser recomendable) usar imaxes Docker nos jobs. Isto faise co atributo image, e serve para dicir que contedor (ou sistema base) debe empregar o runner para executar os comandos dese job.
Ao poñer o atributo image, estás dicíndolle a GitLab «Executa este job dentro dun contedor baseado nesta imaxe de Docker».
Isto permite ter un entorno limpo, controlado e reproducible, sen depender do sistema do runner.
test_python:
image: python:3.11
stage: test
script:
- pip install -r requirements.txt
- pytest
Este job usa a imaxe oficial python:3.11 de DockerHub. Todo o que se executa corre dentro dese contedor. O que fai posible que teñamos xa instalado Python na súa versión 3.11 no runner. As imaxes que se utilizan proveñen de DockerHub. Aínda que tamén se pode personalizar e utilizar outro repositorio de imaxes.
Tamén se pode definir unha imaxe base para todo o pipeline:
image: node:20
stages:
- build
build_job:
stage: build
script:
- npm install
- npm run build
Outros atributos
Nun job de GitLab CI/CD, hai varios atributos moi comúns que se usan para controlar o seu comportamento. Aquí expóñense algúns dos máis importantes:
-
when: se engadimoswhen: manual, este job non se executa automaticamente cando se lanza opipeline. Queda pendente para executalo como "manual". Alguén con permisos pode ir á interface de GitLab e facer clic enPlaypara executalo. Moi útil para realizar probas.deploy_prod:
stage: deploy
script:
- ./deploy_prod.sh
when: manual -
rules: Define en que ramas, tags ou accións debe executarse ou non o job. Substitúeonly/except. Permite condicións máis complexas: por ramas, variables, eventos, etc.Por exemplo no seguinte exemplo tan só se executa o job se os cambios se realizan na rama
main.test_job:
script: npm test
rules:
- if: '$CI_COMMIT_BRANCH == "main"' -
artifacts: Permite gardar ficheiros xerados por un job (ex: binarios, logs, informes).Por exemplo no seguinte exemplo almacénase o contido de
bino cal poderá ser descargado, ou ser usado por jobs posteriores.build_job:
script: make
artifacts:
paths:
- bin/ -
dependencies: Especifica de quejobsprevios depende este job para poder obterartifacts.test:
script: run-tests
dependencies:
- build -
allow_failure: Se se marca comotrue, o job pode fallar e opipelinesegue adiante.lint:
script: npm run lint
allow_failure: true