Saltar al contenido principal

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.
  • stage di en que fase se executa (por exemplo: test).
  • script contén os comandos que executa no runner.

O funcionamento é o seguinte:

  1. Faise un push ao repositorio.
  2. GitLab le o .gitlab-ci.yml.
  3. Crea un pipeline con todos os jobs definidos.
  4. Cada job envíase a un runner (máquina virtual, contedor, etc.).
  5. 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 engadimos when: manual, este job non se executa automaticamente cando se lanza o pipeline. Queda pendente para executalo como "manual". Alguén con permisos pode ir á interface de GitLab e facer clic en Play para 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úe only/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 bin o cal poderá ser descargado, ou ser usado por jobs posteriores.

    build_job:
    script: make
    artifacts:
    paths:
    - bin/
  • dependencies: Especifica de que jobs previos depende este job para poder obter artifacts.

    test:
    script: run-tests
    dependencies:
    - build
  • allow_failure: Se se marca como true, o job pode fallar e o pipeline segue adiante.

    lint:
    script: npm run lint
    allow_failure: true