Sintaxis de Pipeline en GitLab CI: Configuración con only, except, rules y workflow

only y except

Los parámetros only y except controlan la ejecución de jobs en función de ramas o etiquetas. Están siando reemplazados gradualmente por rules.

only define las ramas y etiquetas del proyecto Git donde el job se ejecutará. except define aquelas donde el job no se ejecutará.

# Ejemplo con regexp y palabra clave especial
tarea:
  only:
    - /^feature-.*$/
  except:
    - tags

rules

El parámetro rules evalúa una lista de objetos de regla en orden, hasta que una coincidencia proporciona atributso dinámicos al job. No se puede combinar con only o except.

Disponibles: if (similar a only:variables), changes (como only:changes), exists.

Ejemplo con rules:if

Si la variable URL_SITIO coincide, se requiere ejecución manual. La evaluación se detiene al encontrar la primera coincidencia. Se pueden usar && y || para condiciones múltiples.

variables:
  URL_SITIO: www.ejemplo.com

despliegue:
  stage: despliegue
  script:
    - echo "iniciando despliegue"
    - sleep 2;
  rules:
    - if: '$URL_SITIO == "ejemplo.com"'
      when: manual
    - if: '$URL_SITIO == "www.ejemplo.com"'
      when: delayed
      start_in: '10'
    - when: on_success

Ejemplo con rules:changes

Acepta un array de rutas de archivos. Es verdadero si el archivo Makefile cambia en el commit.

analisis_codigo:
  stage: analisis
  tags:
    - compilacion
  script:
    - echo "ejecutando análisis"
    - sleep 5;
  rules:
    - changes:
      - Makefile
      when: manual
    - if: '$URL_SITIO == "ejemplo.com"'
      when: on_success
    - when: on_success

Ejemplo con rules:exists

Acepta un array de rutas de archivos. Se activa cuando el archivo Dockerfile existe en el repositorio.

analisis_codigo:
  stage: analisis
  tags:
    - compilacion
  script:
    - echo "ejecutando análisis"
    - sleep 5;
  rules:
    - exists:
      - Dockerfile
      when: manual 
    - changes:
      - Dockerfile
      when: on_success
    - if: '$URL_SITIO == "ejemplo.com"'
      when: on_success
    - when: on_success

Ejemplo con rules:allow_failure

Usar allow_failure: true en rules permite que un job falle o espere acción manual sin detener el pipeline.

tarea_prueba:
  script: "echo Hola, Reglas!"
  rules:
    - if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "main"'
      when: manual
      allow_failure: true

Si la primera regla coincide, el job tendrá when: manual y allow_failure: true.

workflow

La palabra clave de nivel superior workflow afecta a todo el pipeline y determina si se crea. El atributo when puede ser always o never. Por defecto es always.

variables:
  URL_SITIO: ejemplo.com

workflow:
  rules:
    - if: '$URL_SITIO == "ejemplo.com"'  # Si no coincide, el pipeline no se ejecuta
    - when: never

Ejemplo integrado

before_script:
  - echo "script-previo-global!!"

variables:
  URL_SITIO: ejemplo.com
  
workflow:
  rules:
    - if: '$URL_SITIO == "ejemplo.com"'
      when: always
    - when: never
    
stages:
  - compilacion
  - pruebas
  - analisis
  - despliegue

compilacion:
  before_script:
    - echo "script-previo-en-tarea"
  stage: compilacion
  script:
    - echo "mvn limpiar "
    - echo "mvn instalar"
    - echo "$URL_SITIO"
  after_script:
    - echo "script-posterior-en-tarea-compilacion"
  rules:
    - exists:
      - Dockerfile
      when: on_success 
      allow_failure: true
    - changes:
      - Dockerfile
      when: manual
    - when: on_failure

pruebas_unitarias:
  stage: pruebas
  script:
    - echo "ejecutar pruebas"
  when: delayed
  start_in: '5'
  allow_failure: true
  retry:
    max: 1
    when:
      - script_failure
  timeout: 1 hours 10 minutes
  
despliegue:
  stage: despliegue
  script:
    - echo "iniciar despliegue"
    - sleep 2;
  rules:
    - if: '$URL_SITIO == "ejemplo.com"'
      when: manual
    - if: '$URL_SITIO == "aejemplo.com"'
      when: delayed
      start_in: '5'
    - when: on_failure
  
analisis_codigo:
  stage: analisis
  script:
    - echo "análisis de código"
    - sleep 5;
  when: on_success
  parallel: 5
 
after_script:
  - echo "script-posterior-global"

Etiquetas: GitLab CI YAML Pipelines GitLab Runner DevOps

Publicado el 6-9 19:59