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"