doc-locale/fr-fr/ci/yaml/_index.md
{{< details >}}
{{< /details >}}
Ce document répertorie les options de configuration du fichier .gitlab-ci.yml GitLab. Ce fichier est l'endroit où vous définissez les jobs CI/CD qui constituent votre pipeline.
.gitlab-ci.yml en suivant un tutoriel qui présente un pipeline simple ou complexe..gitlab-ci.yml utilisé dans une entreprise, consultez le fichier .gitlab-ci.yml pour gitlab.Lorsque vous modifiez votre fichier .gitlab-ci.yml, vous pouvez le valider avec l'outil CI Lint.
La configuration GitLab CI/CD utilise le format YAML, l'ordre des mots-clés n'est donc pas important, sauf indication contraire.
Utilisez les expressions CI/CD pour des options de configuration de pipeline plus dynamiques.
<!-- If you are editing content on this page, follow the instructions for documenting keywords: <https://docs.gitlab.com/development/cicd/cicd_reference_documentation_guide/> -->Une configuration de pipeline GitLab CI/CD inclut :
Les mots-clés globaux qui configurent le comportement du pipeline :
| Mot-clé | Description |
|---|---|
default | Valeurs par défaut personnalisées pour les mots-clés de job. |
include | Importer la configuration à partir d'autres fichiers YAML. |
stages | Les noms et l'ordre des étapes du pipeline. |
variables | Définir les variables CI/CD par défaut pour tous les jobs du pipeline. |
workflow | Contrôler les types de pipeline qui s'exécutent. |
| Mot-clé | Description |
|---|---|
spec | Définir les spécifications pour les fichiers de configuration externes. |
Les jobs configurés avec des mots-clés de job :
| Mot-clé | Description |
|---|---|
after_script | Remplacer un ensemble de commandes exécutées après le job. |
allow_failure | Autoriser l'échec du job. Un job en échec ne provoque pas l'échec du pipeline. |
artifacts | Liste de fichiers et de répertoires à joindre à un job en cas de succès. |
before_script | Remplacer un ensemble de commandes exécutées avant le job. |
cache | Liste de fichiers à mettre en cache entre les exécutions successives. |
coverage | Paramètres de couverture de code pour un job donné. |
dast_configuration | Utiliser la configuration des profils DAST au niveau du job. |
dependencies | Restreindre les artefacts transmis à un job spécifique en fournissant une liste de jobs dont les artefacts doivent être récupérés. |
environment | Nom d'un environnement vers lequel le job effectue un déploiement. |
extends | Entrées de configuration dont ce job hérite. |
identity | S'authentifier auprès de services tiers à l'aide de la fédération d'identité. |
image | Utiliser des images Docker. |
inherit | Sélectionner les valeurs par défaut globales dont tous les jobs héritent. |
interruptible | Définit si un job peut être annulé lorsqu'il est rendu redondant par une exécution plus récente. |
manual_confirmation | Définir un message de confirmation personnalisé pour un job manuel. |
needs | Exécuter des jobs plus tôt que l'ordre des étapes. |
pages | Téléverser le résultat d'un job à utiliser avec GitLab Pages. |
parallel | Nombre d'instances d'un job à exécuter en parallèle. |
release | Indique au runner de générer un objet de release. |
resource_group | Limiter la simultanéité des jobs. |
retry | Quand et combien de fois un job peut être réessayé automatiquement en cas d'échec. |
rules | Liste de conditions à évaluer pour déterminer les attributs sélectionnés d'un job et si celui-ci est créé ou non. |
script | Script shell exécuté par un runner. |
run | Configuration d'exécution exécutée par un runner. |
secrets | Les secrets CI/CD dont le job a besoin. |
services | Utiliser des images de services Docker. |
stage | Définit l'étape d'un job. |
start_in | Retarder l'exécution d'un job pendant une durée spécifiée. Nécessite when: delayed. |
tags | Liste de tags utilisés pour sélectionner un runner. |
timeout | Définir un délai d'expiration personnalisé au niveau du job qui prend la priorité sur le paramètre global du projet. |
trigger | Définit un déclencheur de pipeline downstream. |
variables | Définir des variables CI/CD pour des jobs individuels. |
when | Quand exécuter le job. |
Mots-clés obsolètes qui ne sont plus recommandés.
Certains mots-clés ne sont pas définis dans un job. Ces mots-clés contrôlent le comportement du pipeline ou importent une configuration de pipeline supplémentaire.
default {#default}Vous pouvez définir des valeurs par défaut globales pour certains mots-clés. Chaque mot-clé par défaut est copié dans chaque job qui ne l'a pas encore défini.
La configuration par défaut ne fusionne pas avec la configuration du job. Si le job a déjà un mot-clé défini, le mot-clé du job est prioritaire et la configuration par défaut pour ce mot-clé n'est pas utilisée.
Type de mot-clé : Mot-clé global.
Valeurs prises en charge : Ces mots-clés peuvent avoir des valeurs par défaut personnalisées :
Exemple de default :
default:
image: ruby:3.0
retry: 2
rspec:
script: bundle exec rspec
rspec 2.7:
image: ruby:2.7
script: bundle exec rspec
Dans cet exemple :
image: ruby:3.0 et retry: 2 sont les mots-clés par défaut pour tous les jobs du pipeline.rspec n'a pas image ni retry défini, il utilise donc les valeurs par défaut image: ruby:3.0 et retry: 2.rspec 2.7 n'a pas retry défini, mais il a image explicitement défini. Il utilise la valeur par défaut retry: 2, mais ignore la valeur par défaut image et utilise image: ruby:2.7 défini dans le job.Informations complémentaires :
inherit:default.include {#include}Utilisez include pour inclure des fichiers YAML externes dans votre configuration CI/CD. Vous pouvez diviser un long fichier .gitlab-ci.yml en plusieurs fichiers pour améliorer la lisibilité ou réduire la duplication de la même configuration à plusieurs endroits.
Vous pouvez également stocker des fichiers de modèles dans un dépôt central et les inclure dans des projets.
Les fichiers include sont :
.gitlab-ci.yml..gitlab-ci.yml, quelle que soit la position du mot-clé include.Le délai maximal pour résoudre tous les fichiers est de 30 secondes.
Type de mot-clé : Mot-clé global.
Valeurs prises en charge : Les sous-clés de include :
Et éventuellement :
Informations complémentaires :
include..gitlab-ci.yml. Les deux configurations sont fusionnées et la configuration du fichier .gitlab-ci.yml est prioritaire sur la configuration incluse.include ne sont pas récupérés à nouveau. Tous les jobs d'un pipeline utilisent la configuration récupérée lors de la création du pipeline. Toute modification apportée aux fichiers source include n'affecte pas les réexécutions de jobs.include sont récupérés à nouveau. S'ils ont changé depuis la dernière exécution du pipeline, le nouveau pipeline utilise la configuration modifiée.include:component {#includecomponent}Utilisez include:component pour ajouter un composant CI/CD à la configuration du pipeline.
Type de mot-clé : Mot-clé global.
Valeurs prises en charge : L'adresse complète du composant CI/CD, formatée sous la forme <fully-qualified-domain-name>/<project-path>/<component-name>@<specific-version>.
Exemple de include:component :
include:
- component: $CI_SERVER_FQDN/my-org/security-components/[email protected]
Informations complémentaires :
Related topics :
include:local {#includelocal}Utilisez include:local pour inclure un fichier qui se trouve dans le même dépôt et la même branche que le fichier de configuration contenant le mot-clé include. Utilisez include:local à la place des liens symboliques.
Type de mot-clé : Mot-clé global.
Valeurs prises en charge :
Un chemin complet relatif au répertoire racine (/) :
.yml ou .yaml.* et ** dans le chemin du fichier.Exemple de include:local :
include:
- local: '/templates/.gitlab-ci-template.yml'
Vous pouvez également utiliser une syntaxe plus courte pour définir le chemin :
include: '.gitlab-ci-production.yml'
Informations complémentaires :
.gitlab-ci.yml et le fichier local doivent être sur la même branche.include est toujours évaluée en fonction de l'emplacement du fichier contenant le mot-clé include, et non du projet exécutant le pipeline. Si un include imbriqué se trouve dans un fichier de configuration d'un autre projet, include: local recherche le fichier dans cet autre projet.include:project {#includeproject}Pour inclure des fichiers d'un autre projet privé sur la même instance GitLab, utilisez include:project et include:file.
Type de mot-clé : Mot-clé global.
Valeurs prises en charge :
include:project : Le chemin complet du projet GitLab.include:file Un chemin de fichier complet, ou un tableau de chemins de fichiers, relatif au répertoire racine (/). Les fichiers YAML doivent avoir l'extension .yml ou .yaml.include:ref : Facultatif. La référence depuis laquelle récupérer le fichier. Par défaut, la valeur est HEAD du projet lorsqu'elle n'est pas spécifiée.Exemple de include:project :
include:
- project: 'my-group/my-project'
file: '/templates/.gitlab-ci-template.yml'
- project: 'my-group/my-subgroup/my-project-2'
file:
- '/templates/.builds.yml'
- '/templates/.tests.yml'
Vous pouvez également spécifier un ref :
include:
- project: 'my-group/my-project'
ref: main # Git branch
file: '/templates/.gitlab-ci-template.yml'
- project: 'my-group/my-project'
ref: v1.0.0 # Git Tag
file: '/templates/.gitlab-ci-template.yml'
- project: 'my-group/my-project'
ref: 787123b47f14b552955ca2786bc9542ae66fee5b # Git SHA
file: '/templates/.gitlab-ci-template.yml'
Informations complémentaires :
include est toujours évaluée en fonction de l'emplacement du fichier contenant le mot-clé include, et non du projet exécutant le pipeline. Si un include imbriqué se trouve dans un fichier de configuration d'un autre projet, include: local recherche le fichier dans cet autre projet..gitlab-ci.yml incluse par toutes les méthodes est évaluée. La configuration est un instantané dans le temps et est conservée dans la base de données. GitLab ne prend en compte aucune modification de la configuration du fichier .gitlab-ci.yml référencé jusqu'au démarrage du prochain pipeline.include:project, l'utilisateur exécutant le pipeline doit disposer au minimum du rôle Reporter. Pour les projets internes, tout utilisateur authentifié non externe peut accéder aux fichiers inclus. Pour les projets publics, aucune adhésion n'est requise. Une erreur not found or access denied s'affiche si l'utilisateur ne dispose pas des autorisations suffisantes sur le projet inclus.ref, envisagez :
ref peut être ambiguë.ref dans l'autre projet. Les tags et branches protégés sont plus susceptibles de passer par un processus de gestion des changements avant d'être modifiés.include:remote {#includeremote}Utilisez include:remote avec une URL complète pour inclure un fichier à partir d'un emplacement différent.
Type de mot-clé : Mot-clé global.
Valeurs prises en charge :
Une URL publique accessible via une requête HTTP/HTTPS GET :
.yml ou .yaml.Exemple de include:remote :
include:
- remote: 'https://gitlab.com/example-project/-/raw/main/.gitlab-ci.yml'
Informations complémentaires :
include des inclusions imbriquées.integrity. Si vous créez un lien vers un autre projet GitLab que vous possédez, envisagez d'utiliser à la fois les branches protégées et les tags protégés pour appliquer des règles de gestion des changements.include:template {#includetemplate}Utilisez include:template pour inclure des modèles .gitlab-ci.yml.
Type de mot-clé : Mot-clé global.
Valeurs prises en charge :
Auto-DevOps.gitlab-ci.yml.Exemple de include:template :
# File sourced from the GitLab template collection
include:
- template: Auto-DevOps.gitlab-ci.yml
Plusieurs fichiers include:template :
include:
- template: Android-Fastlane.gitlab-ci.yml
- template: Auto-DevOps.gitlab-ci.yml
Informations complémentaires :
lib/gitlab/ci/templates. Tous les modèles ne sont pas conçus pour être utilisés avec include:template, vérifiez donc les commentaires du modèle avant de l'utiliser.include des inclusions imbriquées.include:inputs {#includeinputs}{{< history >}}
{{< /history >}}
Utilisez include:inputs pour définir les valeurs des paramètres d'entrée lorsque la configuration incluse utilise spec:inputs et est ajoutée au pipeline.
Type de mot-clé : Mot-clé global.
Valeurs prises en charge : Une chaîne de caractères, une valeur numérique ou un booléen.
Exemple de include:inputs :
include:
- local: 'custom_configuration.yml'
inputs:
website: "My website"
Dans cet exemple :
custom_configuration.yml est ajoutée au pipeline, avec une entrée website définie à la valeur My website pour la configuration incluse.Informations complémentaires :
spec:inputs:type, la valeur d'entrée doit correspondre au type défini.spec:inputs:options, la valeur d'entrée doit correspondre à l'une des options listées.Sujets connexes :
include:rules {#includerules}Vous pouvez utiliser rules avec include pour inclure conditionnellement d'autres fichiers de configuration.
Type de mot-clé : Mot-clé global.
Valeurs prises en charge : Ces sous-clés de rules :
Certaines variables CI/CD sont prises en charge.
Exemple de include:rules :
include:
- local: build_jobs.yml
rules:
- if: $INCLUDE_BUILDS == "true"
test-job:
stage: test
script: echo "This is a test job"
Dans cet exemple, si la variable INCLUDE_BUILDS est :
true, la configuration build_jobs.yml est incluse dans le pipeline.true ou inexistante, la configuration build_jobs.yml n'est pas incluse dans le pipeline.Sujets connexes :
include avec :
include:integrity {#includeintegrity}{{< history >}}
{{< /history >}}
Utilisez integrity avec include:remote pour spécifier un hachage SHA256 du fichier distant inclus. Si integrity ne correspond pas au contenu réel, le fichier distant n'est pas traité et le pipeline échoue.
Type de mot-clé : Mot-clé global.
Valeurs prises en charge : Hachage SHA256 encodé en Base64 du contenu inclus.
Exemple de include:integrity :
include:
- remote: 'https://gitlab.com/example-project/-/raw/main/.gitlab-ci.yml'
integrity: 'sha256-L3/GAoKaw0Arw6hDCKeKQlV1QPEgHYxGBHsH4zG1IY8='
include:cache {#includecache}{{< history >}}
ci_cache_remote_includes. Désactivé par défaut.ci_cache_remote_includes a été supprimé.{{< /history >}}
Utilisez cache avec include:remote pour mettre en cache le contenu du fichier distant récupéré et réduire les requêtes HTTP. Lorsqu'il est activé, le fichier distant est mis en cache pendant une durée de vie (TTL) spécifiée, améliorant ainsi les performances du pipeline pour les configurations qui utilisent les mêmes inclusions distantes de manière répétée.
Évaluez le compromis entre les performances et la fraîcheur des données lors de la définition des durées de mise en cache. Des durées de mise en cache plus longues améliorent les performances, mais peuvent utiliser du contenu obsolète si le fichier distant change fréquemment.
Lorsque cache n'est pas défini, le fichier distant est récupéré à chaque fois.
Type de mot-clé : Mot-clé global.
Valeurs prises en charge :
true : Activer la mise en cache avec une durée de vie (TTL) par défaut d'1 heure.minutes, hours ou days (minimum 1 minute).Exemple de include:cache :
include:
- remote: 'https://gitlab.com/example-project/-/raw/main/sample1.gitlab-ci.yml'
cache: true
- remote: 'https://gitlab.com/example-project/-/raw/main/sample2.gitlab-ci.yml'
cache: '1 day'
Informations complémentaires :
include:remote.integrity avec cache, la vérification d'intégrité est effectuée à chaque exécution du pipeline, même lors de l'utilisation du contenu mis en cache.stages {#stages}Utilisez stages pour définir des étapes qui contiennent des groupes de jobs. Utilisez stage dans un job pour configurer son exécution dans une étape spécifique.
Si stages n'est pas défini dans le fichier .gitlab-ci.yml, les étapes par défaut du pipeline sont :
L'ordre des éléments dans stages définit l'ordre d'exécution des jobs :
Si un pipeline ne contient que des jobs dans les étapes .pre ou .post, il ne s'exécute pas. Il doit y avoir au moins un autre job dans une étape différente.
Type de mot-clé : Mot-clé global.
Exemple de stages :
stages:
- build
- test
- deploy
Dans cet exemple :
build s'exécutent en parallèle.build réussissent, les jobs test s'exécutent en parallèle.test réussissent, les jobs deploy s'exécutent en parallèle.deploy réussissent, le pipeline est marqué comme passed.Si un job échoue, le pipeline est marqué comme failed et les jobs des étapes suivantes ne démarrent pas. Les jobs de l'étape en cours ne sont pas arrêtés et continuent de s'exécuter.
Informations complémentaires :
stage, le job est affecté à l'étape test.Sujets connexes :
needs.workflow {#workflow}Utilisez workflow pour contrôler le comportement du pipeline.
Vous pouvez utiliser certaines variables CI/CD prédéfinies dans la configuration workflow, mais pas les variables qui ne sont définies qu'au démarrage des jobs.
Sujets connexes :
workflow: rulesworkflow:auto_cancel:on_new_commit {#workflowauto_cancelon_new_commit}Utilisez workflow:auto_cancel:on_new_commit pour configurer le comportement de la fonctionnalité d'annulation automatique des pipelines redondants.
Valeurs prises en charge :
conservative : Annuler le pipeline, mais uniquement si aucun job avec interruptible: false n'a encore démarré. Valeur par défaut lorsqu'elle n'est pas définie.interruptible : Annuler uniquement les jobs avec interruptible: true.none : Ne pas annuler automatiquement les jobs.Exemple de workflow:auto_cancel:on_new_commit :
workflow:
auto_cancel:
on_new_commit: interruptible
job1:
interruptible: true
script: sleep 60
job2:
interruptible: false # Default when not defined.
script: sleep 60
Dans cet exemple :
job1 et job2 démarrent.job1 est annulé.workflow:auto_cancel:on_job_failure {#workflowauto_cancelon_job_failure}Utilisez workflow:auto_cancel:on_job_failure pour configurer les jobs qui doivent être annulés dès qu'un job échoue.
Valeurs prises en charge :
all : Annuler le pipeline et tous les jobs en cours dès qu'un job échoue.none : Ne pas annuler automatiquement les jobs.Exemple de workflow:auto_cancel:on_job_failure :
stages: [stage_a, stage_b]
workflow:
auto_cancel:
on_job_failure: all
job1:
stage: stage_a
script: sleep 60
job2:
stage: stage_a
script:
- sleep 30
- exit 1
job3:
stage: stage_b
script:
- sleep 30
Dans cet exemple, si job2 échoue, job1 est annulé s'il est toujours en cours d'exécution et job3 ne démarre pas.
Sujets connexes :
workflow:name {#workflowname}Vous pouvez utiliser name dans workflow: pour définir un nom pour les pipelines.
Tous les pipelines reçoivent le nom défini. Les espaces en début et en fin de nom sont supprimés.
Valeurs prises en charge :
Exemples de workflow:name :
Un nom de pipeline simple avec une variable prédéfinie :
workflow:
name: 'Pipeline for branch: $CI_COMMIT_BRANCH'
Une configuration avec différents noms de pipeline en fonction des conditions du pipeline :
variables:
PROJECT1_PIPELINE_NAME: 'Default pipeline name' # A default is not required
workflow:
name: '$PROJECT1_PIPELINE_NAME'
rules:
- if: '$CI_MERGE_REQUEST_LABELS =~ /pipeline:run-in-ruby3/'
variables:
PROJECT1_PIPELINE_NAME: 'Ruby 3 pipeline'
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
variables:
PROJECT1_PIPELINE_NAME: 'MR pipeline: $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME'
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # For default branch pipelines, use the default name
Informations complémentaires :
workflow:rules:variables devient des variables par défaut disponibles dans tous les jobs, y compris les jobs trigger qui transmettent les variables aux pipelines downstream par défaut. Si le pipeline downstream utilise la même variable, la variable est écrasée par la valeur de la variable du pipeline upstream. Assurez-vous de :
PROJECT1_PIPELINE_NAME.inherit:variables dans le job déclencheur et lister les variables exactes que vous souhaitez transmettre au pipeline downstream.workflow:rules {#workflowrules}Le mot-clé rules dans workflow est similaire aux rules définis dans les jobs, mais contrôle si un pipeline entier est créé ou non.
Lorsqu'aucune règle n'est évaluée à true, le pipeline ne s'exécute pas.
Valeurs prises en charge : Vous pouvez utiliser certains des mêmes mots-clés que les rules au niveau du job :
rules: if.rules: changes.rules: exists.when, peut uniquement être always ou never lorsqu'il est utilisé avec workflow.variables.Exemple de workflow:rules :
workflow:
rules:
- if: $CI_COMMIT_TITLE =~ /-draft$/
when: never
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
Dans cet exemple, les pipelines s'exécutent si le titre du commit (première ligne du message de commit) ne se termine pas par -draft et que le pipeline est destiné à :
Informations complémentaires :
start_in, allow_failure et needs ne sont pas pris en charge dans workflow:rules, mais ne causent pas d'erreur de syntaxe. Bien qu'ils n'aient aucun effet, ne les utilisez pas dans workflow:rules car cela pourrait causer des erreurs de syntaxe à l'avenir. Consultez le ticket 436473 pour plus de détails.Sujets connexes :
if courantes pour workflow:rules.rules pour exécuter des pipelines de merge request.workflow:rules:variables {#workflowrulesvariables}Vous pouvez utiliser variables dans workflow:rules pour définir des variables pour des conditions de pipeline spécifiques.
Lorsque la condition correspond, la variable est créée et peut être utilisée par tous les jobs du pipeline. Si la variable est déjà définie au niveau supérieur comme variable par défaut, la variable workflow est prioritaire et remplace la variable par défaut.
Type de mot-clé : Mot-clé global.
Valeurs prises en charge : Paires nom-valeur de variables :
_).Exemple de workflow:rules:variables :
variables:
DEPLOY_VARIABLE: "default-deploy"
workflow:
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
variables:
DEPLOY_VARIABLE: "deploy-production" # Override globally-defined DEPLOY_VARIABLE
- if: $CI_COMMIT_BRANCH =~ /feature/
variables:
IS_A_FEATURE: "true" # Define a new variable.
- if: $CI_COMMIT_BRANCH # Run the pipeline in other cases
job1:
variables:
DEPLOY_VARIABLE: "job1-default-deploy"
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
variables: # Override DEPLOY_VARIABLE defined
DEPLOY_VARIABLE: "job1-deploy-production" # at the job level.
- when: on_success # Run the job in other cases
script:
- echo "Run script with $DEPLOY_VARIABLE as an argument"
- echo "Run another script if $IS_A_FEATURE exists"
job2:
script:
- echo "Run script with $DEPLOY_VARIABLE as an argument"
- echo "Run another script if $IS_A_FEATURE exists"
Lorsque la branche est la branche par défaut :
DEPLOY_VARIABLE de job1 est job1-deploy-production.DEPLOY_VARIABLE de job2 est deploy-production.Lorsque la branche est feature :
DEPLOY_VARIABLE de job1 est job1-default-deploy, et IS_A_FEATURE est true.DEPLOY_VARIABLE de job2 est default-deploy, et IS_A_FEATURE est true.Lorsque la branche est autre chose :
DEPLOY_VARIABLE de job1 est job1-default-deploy.DEPLOY_VARIABLE de job2 est default-deploy.Informations complémentaires :
workflow:rules:variables devient des variables par défaut disponibles dans tous les jobs, y compris les jobs trigger qui transmettent les variables aux pipelines downstream par défaut. Si le pipeline downstream utilise la même variable, la variable est écrasée par la valeur de la variable du pipeline upstream. Assurez-vous de :
PROJECT1_VARIABLE_NAME.inherit:variables dans le job déclencheur et lister les variables exactes que vous souhaitez transmettre au pipeline downstream.workflow:rules:auto_cancel {#workflowrulesauto_cancel}Utilisez workflow:rules:auto_cancel pour configurer le comportement de la fonctionnalité workflow:auto_cancel:on_new_commit ou de la fonctionnalité workflow:auto_cancel:on_job_failure.
Valeurs prises en charge :
on_new_commit : workflow:auto_cancel:on_new_commiton_job_failure : workflow:auto_cancel:on_job_failureExemple de workflow:rules:auto_cancel :
workflow:
auto_cancel:
on_new_commit: interruptible
on_job_failure: all
rules:
- if: $CI_COMMIT_REF_PROTECTED == 'true'
auto_cancel:
on_new_commit: none
on_job_failure: none
- when: always # Run the pipeline in other cases
test-job1:
script: sleep 10
interruptible: false
test-job2:
script: sleep 10
interruptible: true
Dans cet exemple, workflow:auto_cancel:on_new_commit est défini sur interruptible et workflow:auto_cancel:on_job_failure est défini sur all pour tous les jobs par défaut. Mais si un pipeline s'exécute pour une branche protégée, la règle remplace la valeur par défaut avec on_new_commit: none et on_job_failure: none. Par exemple, si un pipeline s'exécute pour :
test-job1 continue de s'exécuter et test-job2 est annulé.test-job1 et test-job2 continuent tous les deux de s'exécuter.Certains mots-clés doivent être définis dans la section d'en-tête d'un fichier de configuration YAML. L'en-tête doit se trouver en haut du fichier, séparé du reste de la configuration par ---.
spec {#spec}Ajoutez une section spec à l'en-tête d'un fichier YAML pour configurer le comportement d'un pipeline lorsqu'une configuration est ajoutée au pipeline avec le mot-clé include.
Les spécifications doivent être déclarées en haut d'un fichier de configuration, dans une section d'en-tête séparée du reste de la configuration par ---.
spec:inputs {#specinputs}Vous pouvez utiliser spec:inputs pour définir des entrées pour la configuration CI/CD.
Utilisez le format d'interpolation $[[ inputs.input-id ]] pour référencer les valeurs en dehors de la section d'en-tête. Les entrées sont évaluées et interpolées lors de la récupération de la configuration pendant la création du pipeline. Lors de l'utilisation de inputs, l'interpolation est effectuée avant que la configuration ne soit fusionnée avec le contenu du fichier .gitlab-ci.yml.
Type de mot-clé : Mot-clé d'en-tête. spec doit être déclaré en haut du fichier de configuration, dans une section d'en-tête.
Valeurs prises en charge : Un ensemble de chaînes de caractères représentant les entrées attendues.
Exemple de spec:inputs :
spec:
inputs:
environment:
job-stage:
---
scan-website:
stage: $[[ inputs.job-stage ]]
script: ./scan-website $[[ inputs.environment ]]
Informations complémentaires :
spec:inputs:default pour définir une valeur par défaut. Évitez les entrées obligatoires, sauf si vous utilisez uniquement des entrées avec include:inputs.spec:inputs:type pour définir un type d'entrée différent.Sujets connexes :
spec:inputs:default {#specinputsdefault}Les entrées sont obligatoires lors de leur inclusion, sauf si vous définissez une valeur par défaut avec spec:inputs:default.
Utilisez default: '' pour ne pas avoir de valeur par défaut.
Type de mot-clé : Mot-clé d'en-tête. spec doit être déclaré en haut du fichier de configuration, dans une section d'en-tête.
Valeurs prises en charge : Une chaîne de caractères représentant la valeur par défaut, ou ''.
Exemple de spec:inputs:default :
spec:
inputs:
website:
user:
default: 'test-user'
flags:
default: ''
---
# The pipeline configuration would follow...
Dans cet exemple :
website est obligatoire et doit être défini.user est facultatif. Si non défini, la valeur est test-user.flags est facultatif. S'il n'est pas défini, il n'a aucune valeur.Informations complémentaires :
spec:inputs:description {#specinputsdescription}Utilisez description pour donner une description à une entrée spécifique. La description n'affecte pas le comportement de l'entrée et sert uniquement à aider les utilisateurs du fichier à comprendre l'entrée.
Type de mot-clé : Mot-clé d'en-tête. spec doit être déclaré en haut du fichier de configuration, dans une section d'en-tête.
Valeurs prises en charge : Une chaîne de caractères représentant la description.
Exemple de spec:inputs:description :
spec:
inputs:
flags:
description: 'Sample description of the `flags` input details.'
---
# The pipeline configuration would follow...
spec:inputs:options {#specinputsoptions}{{< history >}}
{{< /history >}}
Les entrées peuvent utiliser options pour spécifier une liste de valeurs autorisées pour une entrée. La limite est de 50 options par entrée.
Type de mot-clé : Mot-clé d'en-tête. spec doit être déclaré en haut du fichier de configuration, dans une section d'en-tête.
Valeurs prises en charge : Un tableau d'options d'entrée.
Exemple de spec:inputs:options :
spec:
inputs:
environment:
options:
- development
- staging
- production
---
# The pipeline configuration would follow...
Dans cet exemple :
environment est obligatoire et doit être défini avec l'une des valeurs de la liste.Informations complémentaires :
spec:inputs:regex {#specinputsregex}Utilisez spec:inputs:regex pour spécifier une expression régulière à laquelle l'entrée doit correspondre.
Type de mot-clé : Mot-clé d'en-tête. spec doit être déclaré en haut du fichier de configuration, dans une section d'en-tête.
Valeurs prises en charge : Doit être une expression régulière.
Exemple de spec:inputs:regex :
spec:
inputs:
version:
regex: ^v\d\.\d+(\.\d+)?$
---
# The pipeline configuration would follow...
Dans cet exemple, les entrées v1.0 ou v1.2.3 correspondent à l'expression régulière et passent la validation. Une entrée de v1.A.B ne correspond pas à l'expression régulière et échoue à la validation.
Informations complémentaires :
inputs:regex peut uniquement être utilisé avec un type de string, pas number ni boolean./. Par exemple, utilisez regex.*, et non /regex.*/.inputs:regex utilise RE2 pour analyser les expressions régulières.spec:inputs:rules {#specinputsrules}{{< history >}}
{{< /history >}}
Utilisez spec:inputs:rules pour définir des valeurs conditionnelles de options et de default pour une entrée en fonction des valeurs d'autres entrées.
Type de mot-clé : Mot-clé d'en-tête. spec doit être déclaré en haut du fichier de configuration, dans une section d'en-tête.
Valeurs prises en charge : Un tableau d'objets de règles. Chaque règle peut avoir :
if : Une expression conditionnelle pour vérifier les valeurs d'entrée, en utilisant la syntaxe $[[ inputs.input-id ]].options : Un tableau de valeurs autorisées pour l'entrée.default : La valeur par défaut de l'entrée lorsque cette règle correspond. Utilisez default: null pour permettre aux utilisateurs de saisir leur propre valeur pour l'entrée.Exemple de spec:inputs:rules :
spec:
inputs:
environment:
options: ['development', 'production']
default: 'development'
instance_type:
description: 'VM instance size'
rules:
- if: $[[ inputs.environment ]] == 'development'
options: ['small', 'medium']
default: 'small'
- if: $[[ inputs.environment ]] == 'production'
options: ['large', 'xlarge']
default: 'large'
---
deploy:
script: echo "Deploying $[[ inputs.instance_type ]] instance"
Dans cet exemple, lorsque environment est development, les utilisateurs ne peuvent sélectionner que des instances small ou medium. Lorsque environment est production, seules les instances large ou xlarge sont disponibles.
Informations complémentaires :
if correspondante est utilisée.if agit comme un repli lorsqu'aucune autre règle ne correspond.options avec au moins une valeur.options doivent également définir une valeur default qui existe dans la liste options.rules et options ou default de niveau supérieur pour la même entrée.Sujets connexes :
spec:inputs:type {#specinputstype}Par défaut, les entrées attendent des chaînes de caractères. Utilisez spec:inputs:type pour définir un type requis différent pour les entrées.
Type de mot-clé : Mot-clé d'en-tête. spec doit être déclaré en haut du fichier de configuration, dans une section d'en-tête.
Valeurs prises en charge : Peut être l'une des valeurs suivantes :
array, pour accepter un tableau d'entrées.string, pour accepter des entrées de type chaîne de caractères (valeur par défaut lorsqu'il n'est pas défini).number, pour n'accepter que des entrées numériques.boolean, pour n'accepter que des entrées true ou false.Exemple de spec:inputs:type :
spec:
inputs:
job_name:
website:
type: string
port:
type: number
available:
type: boolean
array_input:
type: array
---
# The pipeline configuration would follow...
spec:include {#specinclude}{{< history >}}
ci_file_inputs. Désactivé par défaut.ci_file_inputs a été supprimé.{{< /history >}}
Utilisez spec:include pour inclure des définitions d'entrées externes à partir d'autres fichiers. Vous pouvez partager et réutiliser des définitions d'entrées dans plusieurs configurations de pipeline.
Type de mot-clé : Mot-clé d'en-tête. spec doit être déclaré en haut du fichier de configuration, dans une section d'en-tête.
Valeurs prises en charge : Un tableau d'emplacements d'inclusion. Prend en charge uniquement les inclusions local, remote et project.
Exemple de spec:include :
spec:
include:
- local: /shared-inputs.yml
inputs:
environment:
default: production
---
deploy:
script: echo "Deploying to $[[ inputs.environment ]]"
Avec plusieurs inclusions provenant de différentes sources :
spec:
include:
- local: /base-inputs.yml
- remote: 'https://example.com/ci/common-inputs.yml'
- project: 'my-group/shared-configs'
ref: main
file: '/ci/team-inputs.yml'
inputs:
environment:
default: production
---
deploy:
script: echo "Deploying to $[[ inputs.environment ]]"
Informations complémentaires :
spec:include dans les composants CI/CD.inputs. Les autres clés provoquent des erreurs de validation.local, remote et project. Ne prend pas en charge les inclusions template, component ou artifact.Sujets connexes :
spec:component {#speccomponent}{{< history >}}
ci_component_context_interpolation. Activé par défaut.ci_component_context_interpolation a été supprimé.{{< /history >}}
Utilisez spec:component pour définir quelles données de contexte du composant sont disponibles pour l'interpolation dans un composant CI/CD.
Le contexte du composant fournit des métadonnées sur le composant lui-même, telles que son nom, sa version et le SHA du commit. Cela permet aux modèles de composants de référencer leurs propres métadonnées de manière dynamique.
Utilisez le format d'interpolation $[[ component.field-name ]] pour référencer les valeurs du contexte du composant dans le modèle de composant.
Type de mot-clé : Mot-clé d'en-tête. spec doit être déclaré en haut du fichier de configuration, dans une section d'en-tête.
Valeurs prises en charge : Un tableau de chaînes de caractères. Chaque chaîne doit être l'une des valeurs suivantes :
name : Le nom du composant tel que spécifié dans le chemin du composant.sha : Le SHA du commit du composant.version : La version sémantique résolue à partir de la ressource du catalogue. Renvoie null si :
reference : La référence originale spécifiée après @ dans le chemin du composant. Par exemple, 1.0, ~latest, un nom de branche ou un SHA de commit.Exemple de spec:component :
spec:
component: [name, version, reference]
inputs:
stage:
default: build
---
build-image:
stage: $[[ inputs.stage ]]
image: registry.example.com/$[[ component.name ]]:$[[ component.version ]]
script:
- echo "Building with component version $[[ component.version ]]"
- echo "Component reference: $[[ component.reference ]]"
Informations complémentaires :
version se résout en version sémantique réelle lors de l'utilisation de :
@1.0.0 (renvoie 1.0.0)@1.0 (renvoie la dernière version correspondante, par exemple 1.0.2)@~latest (renvoie la dernière version)reference renvoie toujours la valeur exacte spécifiée après @ :
@1.0 renvoie 1.0 (tandis que version pourrait renvoyer 1.0.2)@~latest renvoie ~latest (tandis que version renvoie le numéro de version réel)@abc123 renvoie abc123 (tandis que version renvoie null)Sujets connexes :
spec:description {#specdescription}{{< history >}}
{{< /history >}}
Utilisez spec:description pour fournir une brève description du composant. La description est affichée dans le catalogue CI/CD sur la page de détails du composant, au-dessus du tableau des entrées.
Type de mot-clé : Mot-clé d'en-tête. spec doit être déclaré en haut du fichier de configuration, dans une section d'en-tête.
Valeurs prises en charge : Une chaîne décrivant le composant.
Exemple de spec:description :
spec:
description: "A description of the component visible to users in the CI/CD Catalog."
inputs:
stage:
default: test
---
scan-job:
stage: $[[ inputs.stage ]]
script: ./run-scan.sh
Les rubriques suivantes expliquent comment utiliser les mots-clés pour configurer des pipelines CI/CD.
after_script {#after_script}{{< history >}}
after_script pour les jobs annulés a été introduite dans GitLab 17.0.{{< /history >}}
Utilisez after_script pour définir un tableau de commandes à exécuter en dernier, après la fin des sections before_script et script d'un job. Les commandes after_script s'exécutent également lorsque :
before_script ou script sont encore en cours d'exécution.script_failure, mais pas avec les autres types d'échec.La configuration du job et la configuration par défaut ne sont pas fusionnées. Si le pipeline a default:after_script défini, et que le job a également after_script, la configuration du job est prioritaire et la configuration par défaut n'est pas utilisée.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge : Un tableau comprenant :
Les variables CI/CD sont prises en charge.
Exemple de after_script :
job:
script:
- echo "An example script section."
after_script:
- echo "Execute this command after the `script` section completes."
Informations complémentaires :
Les scripts que vous spécifiez dans after_script s'exécutent dans un nouveau shell, séparé des commandes before_script ou script. En conséquence, ils :
before_script ou script, notamment :
script.before_script ou script.RUNNER_AFTER_SCRIPT_TIMEOUT. Dans GitLab 16.3 et versions antérieures, le délai d'expiration est fixé à 5 minutes.script réussit et que after_script expire ou échoue, le job se termine avec le code 0 (Job Succeeded).after_script ne s'exécutent pas par défaut.after_script s'exécute en définissant des valeurs appropriées pour RUNNER_SCRIPT_TIMEOUT et RUNNER_AFTER_SCRIPT_TIMEOUT qui ne dépassent pas le délai d'expiration du job.after_script au niveau supérieur, mais pas dans la section default, est dépréciée.Execution timing and file inclusion :
Les commandes after_script s'exécutent avant les opérations de téléversement du cache et des artefacts.
after_script sont inclus dans les artefacts.after_script sont incluses dans les téléversements du cache.after_script crée ou modifie dans les chemins de cache ou d'artefacts spécifiés sont capturés et téléversés. Vous pouvez utiliser cette temporisation pour des scénarios tels que :
Dans l'exemple suivant, les seuls fichiers non inclus sont ceux créés ou modifiés après les étapes de téléversement des artefacts ou du cache :
job:
script:
- echo "main" > output.txt
- build_something
after_script:
- echo "modified in after_script" >> output.txt # This WILL be in the artifact
- generate_test_report > report.html # This WILL be in the artifact
artifacts:
paths:
- output.txt
- report.html
cache:
paths:
- output.txt # Will include the "modified in after_script" line
Pour plus d'informations, consultez le flux d'exécution du job.
Sujets connexes :
after_script avec default pour définir un tableau de commandes par défaut à exécuter après tous les jobs.after_script si le job est annulé.after_script pour faciliter la révision des job logs.after_script.allow_failure {#allow_failure}Utilisez allow_failure pour déterminer si un pipeline doit continuer à s'exécuter lorsqu'un job échoue.
allow_failure: true.allow_failure: false.Lorsque les jobs sont autorisés à échouer (allow_failure: true), un avertissement orange ({{< icon name="status_warning" >}}) indique qu'un job a échoué. Cependant, le pipeline est réussi et le commit associé est marqué comme passé sans avertissement.
Ce même avertissement s'affiche lorsque :
La valeur par défaut de allow_failure est :
true pour les jobs manuels.false pour les jobs qui utilisent when: manual dans rules.false dans tous les autres cas.Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
true ou false.Exemple de allow_failure :
job1:
stage: test
script:
- execute_script_1
job2:
stage: test
script:
- execute_script_2
allow_failure: true
job3:
stage: deploy
script:
- deploy_to_staging
environment: staging
Dans cet exemple, job1 et job2 s'exécutent en parallèle :
job1 échoue, les jobs de l'étape deploy ne démarrent pas.job2 échoue, les jobs de l'étape deploy peuvent tout de même démarrer.Informations complémentaires :
allow_failure comme sous-clé de rules.allow_failure: true est défini, le job est toujours considéré comme réussi, et les jobs ultérieurs avec when: on_failure ne démarrent pas si ce job échoue.allow_failure: false avec un job manuel pour créer un job manuel bloquant. Un pipeline bloqué n'exécute aucun job dans les étapes ultérieures tant que le job manuel n'est pas démarré et terminé avec succès.allow_failure:exit_codes {#allow_failureexit_codes}Utilisez allow_failure:exit_codes pour contrôler quand un job est autorisé à échouer. Le job est allow_failure: true pour l'un des codes de sortie listés, et allow_failure false pour tout autre code de sortie.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
Exemple de allow_failure :
test_job_1:
script:
- echo "Run a script that results in exit code 1. This job fails."
- exit 1
allow_failure:
exit_codes: 137
test_job_2:
script:
- echo "Run a script that results in exit code 137. This job is allowed to fail."
- exit 137
allow_failure:
exit_codes:
- 137
- 255
artifacts {#artifacts}{{< history >}}
symlinks ne sont plus suivis, ce qui se produisait dans certains cas limites avec les versions précédentes de GitLab Runner.{{< /history >}}
Utilisez artifacts pour spécifier les fichiers à enregistrer en tant qu'artefacts de job. Les artefacts de job sont une liste de fichiers et de répertoires attachés au job lorsqu'il réussit, échoue ou dans tous les cas.
Les artefacts sont envoyés à GitLab une fois le job terminé. Ils sont disponibles au téléchargement dans l'interface GitLab si leur taille est inférieure à la taille maximale des artefacts.
Par défaut, les jobs des étapes ultérieures téléchargent automatiquement tous les artefacts créés par les jobs des étapes précédentes. Vous pouvez contrôler le comportement de téléchargement des artefacts dans les jobs avec dependencies.
Lors de l'utilisation du mot-clé needs, les jobs peuvent uniquement télécharger des artefacts à partir des jobs définis dans la configuration needs.
Les artefacts de job ne sont collectés que pour les jobs réussis par défaut, et les artefacts sont restaurés après les caches.
La configuration du job et la configuration par défaut ne sont pas fusionnées. Si le pipeline a default:artifacts défini, et que le job a également artifacts, la configuration du job est prioritaire et la configuration par défaut n'est pas utilisée.
En savoir plus sur les artefacts.
artifacts:paths {#artifactspaths}Les chemins sont relatifs au répertoire du projet ($CI_PROJECT_DIR) et ne peuvent pas pointer directement en dehors de celui-ci.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge :
doublestar.Glob.pages.publish est automatiquement ajouté à artifacts:paths, vous n'avez donc pas besoin de le spécifier à nouveau.pages.publish n'est pas spécifié, le répertoire public est automatiquement ajouté à artifacts:paths.Les variables CI/CD sont prises en charge.
Exemple de artifacts:paths :
job:
artifacts:
paths:
- binaries/
- .config
Cet exemple crée un artefact avec .config et tous les fichiers du répertoire binaries.
Informations complémentaires :
artifacts:name, le fichier d'artefacts est nommé artifacts, ce qui devient artifacts.zip lors du téléchargement.Sujets connexes :
dependencies.artifacts:exclude {#artifactsexclude}Utilisez artifacts:exclude pour empêcher l'ajout de fichiers dans une archive d'artefacts.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge :
doublestar.PathMatch.Exemple de artifacts:exclude :
artifacts:
paths:
- binaries/
exclude:
- binaries/**/*.o
Cet exemple stocke tous les fichiers dans binaries/, mais pas les fichiers *.o situés dans les sous-répertoires de binaries/.
Informations complémentaires :
artifacts:exclude ne font pas l'objet d'une recherche récursive.artifacts:untracked peuvent également être exclus à l'aide de artifacts:exclude.Sujets connexes :
artifacts:expire_in {#artifactsexpire_in}Utilisez expire_in pour spécifier la durée de conservation des artefacts de job avant leur expiration et leur suppression. Le paramètre expire_in n'affecte pas :
Une fois expirés, les artefacts sont supprimés toutes les heures par défaut (via un job cron) et ne sont plus accessibles.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge : La durée d'expiration. Si aucune unité n'est fournie, la durée est en secondes. Les valeurs valides comprennent :
'42'42 seconds3 mins 4 sec2 hrs 20 min2h20min6 mos 1 day47 yrs 6 mos and 4d3 weeks and 2 daysneverExemple de artifacts:expire_in :
job:
artifacts:
expire_in: 1 week
Informations complémentaires :
expire_in sur never.could not retrieve the needed artifacts. Augmentez la durée d'expiration, ou utilisez dependencies dans les jobs ultérieurs pour éviter qu'ils ne tentent de récupérer des artefacts expirés.artifacts:expire_in n'affecte pas les déploiements GitLab Pages. Pour configurer l'expiration des déploiements Pages, utilisez pages.expire_in.artifacts:expose_as {#artifactsexpose_as}Utilisez le mot-clé artifacts:expose_as pour exposer les artefacts dans l'interface des merge requests.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge :
artifacts:paths.Exemple de artifacts:expose_as :
test:
script: ["echo 'test' > file.txt"]
artifacts:
expose_as: 'artifact 1'
paths: ['file.txt']
Informations complémentaires :
expose_as une seule fois par job, avec un maximum de 10 jobs par merge request.artifacts:paths :
/. Par exemple, directory/ fonctionne avec artifacts:expose_as, mais directory ne fonctionne pas.artifacts:paths ne comprend qu'un seul fichier, le lien ouvre directement le fichier. Dans tous les autres cas, le lien ouvre le navigateur d'artefacts.Sujets connexes :
artifacts:name {#artifactsname}Utilisez le mot-clé artifacts:name pour définir le nom de l'archive d'artefacts créée. Vous pouvez spécifier un nom unique pour chaque archive.
Si non défini, le nom par défaut est artifacts, ce qui devient artifacts.zip lors du téléchargement.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge :
artifacts:paths.Exemple de artifacts:name :
Pour créer une archive avec le nom du job en cours :
job:
artifacts:
name: "job1-artifacts-file"
paths:
- binaries/
Sujets connexes :
artifacts:public {#artifactspublic}[!note]
artifacts:publicest désormais remplacé parartifacts:accessqui offre davantage d'options.
Utilisez artifacts:public pour contrôler si les artefacts de job dans les pipelines publics sont disponibles au téléchargement via l'interface GitLab et l'API par les utilisateurs anonymes, ou par les rôles Guest et Reporter.
[!warning] Cette option affecte uniquement l'accès via l'interface GitLab et l'API. Les jobs CI/CD utilisant des jetons de job peuvent toujours accéder aux artefacts via l'API du runner, quel que soit ce paramètre. Pour restreindre l'accès par jeton de job, configurez les paramètres de visibilité CI/CD de votre projet sur Uniquement les membres du projet.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge :
true (par défaut) : Les artefacts d'un job dans les pipelines publics sont disponibles au téléchargement par n'importe qui, y compris les utilisateurs anonymes, ou les rôles Guest et Reporter.false : Les artefacts du job ne sont disponibles au téléchargement que pour les utilisateurs ayant le rôle Developer, Maintainer ou Owner.Exemple de artifacts:public :
job:
artifacts:
public: false
artifacts:access {#artifactsaccess}{{< history >}}
maintainer a été introduite dans GitLab 18.4.{{< /history >}}
Utilisez artifacts:access pour déterminer qui peut accéder aux artefacts de job via l'interface GitLab ou l'API. Cette option ne vous empêche pas de transmettre des artefacts aux pipelines downstream.
Vous ne pouvez pas utiliser artifacts:public et artifacts:access dans le même job.
[!warning] Cette option affecte uniquement l'accès via l'interface GitLab et l'API. Les jobs CI/CD utilisant des jetons de job peuvent toujours accéder aux artefacts via l'API du runner, quel que soit ce paramètre. Pour restreindre l'accès par jeton de job, configurez les paramètres de visibilité CI/CD de votre projet sur Uniquement les membres du projet.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
all (par défaut) : Les artefacts d'un job dans les pipelines publics sont disponibles au téléchargement par n'importe qui, y compris les utilisateurs anonymes, invités et reporters.developer : Les artefacts du job ne sont disponibles au téléchargement que pour les utilisateurs ayant le rôle Developer, Maintainer ou Owner.maintainer : Les artefacts du job ne sont disponibles au téléchargement que pour les utilisateurs ayant le rôle Maintainer ou Owner.none : Les artefacts du job ne sont disponibles au téléchargement pour personne.Exemple de artifacts:access :
job:
artifacts:
access: 'developer'
Informations complémentaires :
artifacts:access affecte également tous les artifacts:reports, vous pouvez donc également restreindre l'accès aux artefacts pour les rapports.artifacts:reports {#artifactsreports}Utilisez artifacts:reports pour collecter les artefacts générés par les modèles inclus dans les jobs.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge :
Exemple de artifacts:reports :
rspec:
stage: test
script:
- bundle install
- rspec --format RspecJunitFormatter --out rspec.xml
artifacts:
reports:
junit: rspec.xml
Informations complémentaires :
artifacts:paths. L'artefact est ainsi téléversé et stocké deux fois.artifacts: reports sont toujours téléversés, quels que soient les résultats du job (succès ou échec). Vous pouvez utiliser artifacts:expire_in pour définir une date d'expiration pour les artefacts.artifacts:untracked {#artifactsuntracked}Utilisez artifacts:untracked pour ajouter tous les fichiers Git non suivis en tant qu'artefacts (en plus des chemins définis dans artifacts:paths). artifacts:untracked ignore la configuration du fichier .gitignore du dépôt, de sorte que les artefacts correspondants dans .gitignore sont inclus.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge :
true ou false (par défaut si non défini).Exemple de artifacts:untracked :
Enregistrer tous les fichiers Git non suivis :
job:
artifacts:
untracked: true
Sujets connexes :
artifacts:when {#artifactswhen}Utilisez artifacts:when pour téléverser des artefacts en cas d'échec du job ou malgré l'échec.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge :
on_success (par défaut) : Téléverser les artefacts uniquement lorsque le job réussit.on_failure : Téléverser les artefacts uniquement lorsque le job échoue.always : Toujours téléverser les artefacts (sauf lorsque les jobs expirent). Par exemple, lors du téléversement d'artefacts nécessaires au dépannage de tests qui échouent.Exemple de artifacts:when :
job:
artifacts:
when: on_failure
Informations complémentaires :
artifacts:reports sont toujours téléversés, quels que soient les résultats du job (succès ou échec). artifacts:when ne modifie pas ce comportement.before_script {#before_script}Utilisez before_script pour définir un tableau de commandes à exécuter avant les commandes script de chaque job, mais après la restauration des artefacts.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge : Un tableau comprenant :
Les variables CI/CD sont prises en charge.
Exemple de before_script :
job:
before_script:
- echo "Execute this command before any 'script:' commands."
script:
- echo "This command executes after the job's 'before_script' commands."
Informations complémentaires :
before_script sont concaténés avec les scripts que vous spécifiez dans le script principal. Les scripts combinés s'exécutent ensemble dans un seul shell.before_script au niveau supérieur, mais pas dans la section default, est dépréciée.Sujets connexes :
before_script avec default pour définir un tableau de commandes par défaut à exécuter avant les commandes script dans tous les jobs.
default:before_script défini, et que le job a également before_script, la configuration du job est prioritaire et la configuration par défaut n'est pas utilisée.before_script pour faciliter la révision des job logs.cache {#cache}{{< history >}}
symlinks ne sont plus suivis, ce qui se produisait dans certains cas limites avec les versions précédentes de GitLab Runner.{{< /history >}}
Utilisez cache pour spécifier une liste de fichiers et de répertoires à mettre en cache entre les jobs. Vous pouvez uniquement utiliser des chemins situés dans la copie de travail locale.
Les caches sont :
Vous pouvez désactiver la mise en cache pour des jobs spécifiques, par exemple pour remplacer :
La configuration du job et la configuration par défaut ne sont pas fusionnées. Si le pipeline a default:cache défini, et que le job a également cache, la configuration du job est prioritaire et la configuration par défaut n'est pas utilisée.
Pour plus d'informations sur les caches, consultez Mise en cache dans GitLab CI/CD.
L'utilisation de cache au niveau supérieur, mais pas dans la section default, est dépréciée.
cache:paths {#cachepaths}Utilisez le mot-clé cache:paths pour choisir les fichiers ou répertoires à mettre en cache.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge :
$CI_PROJECT_DIR). Vous pouvez utiliser des caractères génériques avec des modèles glob et doublestar.Glob.Les variables CI/CD sont prises en charge.
Exemple de cache:paths :
Mettre en cache tous les fichiers dans binaries se terminant par .apk et le fichier .config :
rspec:
script:
- echo "This job uses a cache."
cache:
key: binaries-cache
paths:
- binaries/*.apk
- .config
Informations complémentaires :
cache:paths inclut les fichiers même s'ils ne sont pas suivis ou s'ils figurent dans votre fichier .gitignore.Sujets connexes :
cache:paths.cache:key {#cachekey}Utilisez le mot-clé cache:key pour attribuer une clé d'identification unique à chaque cache. Tous les jobs qui utilisent la même clé de cache utilisent le même cache, y compris dans différents pipelines.
Si non définie, la clé par défaut est default. Tous les jobs avec le mot-clé cache mais sans cache:key partagent le cache default.
Doit être utilisé avec cache: paths, sinon rien n'est mis en cache.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge :
Exemple de cache:key :
cache-job:
script:
- echo "This job uses a cache."
cache:
key: binaries-cache-$CI_COMMIT_REF_SLUG
paths:
- binaries/
Informations complémentaires :
$ par %. Par exemple : key: %CI_COMMIT_REF_SLUG%cache:key ne peut pas contenir :
/, ou son équivalent encodé en URI %2F.. (quel qu'en soit le nombre), ou son équivalent encodé en URI %2E.cache:key différent. Sinon, le contenu du cache peut être écrasé.Sujets connexes :
cache:key spécifié est introuvable.cache:key.cache:key:files {#cachekeyfiles}Utilisez cache:key:files pour générer une nouvelle clé de cache lorsque le contenu des fichiers spécifiés change. Si le contenu reste inchangé, la clé de cache reste cohérente entre les branches et les pipelines. Vous pouvez réutiliser les caches et les reconstruire moins souvent, ce qui accélère les exécutions ultérieures du pipeline.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge :
Les variables CI/CD ne sont pas prises en charge.
Exemple de cache:key:files :
cache-job:
script:
- echo "This job uses a cache."
cache:
key:
files:
- Gemfile.lock
- package.json
paths:
- vendor/ruby
- node_modules
Cet exemple crée un cache pour les dépendances Ruby et Node.js. Le cache est lié aux versions actuelles des fichiers Gemfile.lock et package.json. Lorsque l'un de ces fichiers change, une nouvelle clé de cache est calculée et un nouveau cache est créé. Toutes les futures exécutions de jobs qui utilisent les mêmes Gemfile.lock et package.json avec cache:key:files utilisent le nouveau cache, au lieu de reconstruire les dépendances.
Informations complémentaires :
key du cache est un SHA calculé à partir du contenu des fichiers listés. Si un fichier n'existe pas, il est ignoré dans le calcul de la clé. Si aucun des fichiers spécifiés n'existe, la clé de secours est default.**/package.json peuvent être utilisés.cache:key:files_commits {#cachekeyfiles_commits}Utilisez cache:key:files_commits pour générer une nouvelle clé de cache lorsque le dernier commit change pour les fichiers spécifiés. Les clés de cache cache:key:files_commits changent chaque fois que les fichiers spécifiés font l'objet d'un nouveau commit, même si le contenu du fichier reste identique.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge :
Exemple de cache:key:files_commits :
cache-job:
script:
- echo "This job uses a commit-based cache."
cache:
key:
files_commits:
- package.json
- yarn.lock
paths:
- node_modules
Cet exemple crée un cache basé sur l'historique des commits de package.json et yarn.lock. Si l'historique des commits de ces fichiers change, une nouvelle clé de cache est calculée et un nouveau cache est créé.
Informations complémentaires :
key du cache est un SHA calculé à partir du commit le plus récent pour chaque fichier spécifié.default.cache:key:files dans la même configuration de cache.cache:key:prefix {#cachekeyprefix}Utilisez cache:key:prefix pour combiner un préfixe avec le SHA calculé pour cache:key:files.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge :
Exemple de cache:key:prefix :
rspec:
script:
- echo "This rspec job uses a cache."
cache:
key:
files:
- Gemfile.lock
prefix: $CI_JOB_NAME
paths:
- vendor/ruby
Par exemple, l'ajout d'un prefix avec la valeur $CI_JOB_NAME donne une clé du type rspec-feef9576d21ee9b6a32e30c5c79d0a0ceb68d1e5. Si une branche modifie Gemfile.lock, cette branche dispose d'un nouveau checksum SHA pour cache:key:files. Une nouvelle clé de cache est générée et un nouveau cache est créé pour cette clé. Si Gemfile.lock est introuvable, le préfixe est ajouté à default, de sorte que la clé dans l'exemple serait rspec-default.
Informations complémentaires :
cache:key:files n'est modifié dans aucun commit, le préfixe est ajouté à la clé default.cache:untracked {#cacheuntracked}Utilisez untracked: true pour mettre en cache tous les fichiers non suivis dans votre dépôt Git. Les fichiers non suivis comprennent les fichiers qui sont :
.gitignore.git add.La mise en cache des fichiers non suivis peut créer des caches de taille inattendue si le job télécharge :
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge :
true ou false (par défaut).Exemple de cache:untracked :
rspec:
script: test
cache:
untracked: true
Informations complémentaires :
Vous pouvez combiner cache:untracked avec cache:paths pour mettre en cache tous les fichiers non suivis, ainsi que les fichiers dans les chemins configurés. Utilisez cache:paths pour mettre en cache des fichiers spécifiques, y compris les fichiers suivis ou les fichiers en dehors du répertoire de travail, et utilisez cache: untracked pour mettre également en cache tous les fichiers non suivis. Par exemple :
rspec:
script: test
cache:
untracked: true
paths:
- binaries/
Dans cet exemple, le job met en cache tous les fichiers non suivis du dépôt, ainsi que tous les fichiers dans binaries/. Si des fichiers non suivis se trouvent dans binaries/, ils sont couverts par les deux mots-clés.
cache:unprotect {#cacheunprotect}{{< history >}}
{{< /history >}}
Utilisez cache:unprotect pour configurer un cache partagé entre les branches protégées et non protégées.
[!warning] Lorsque cette option est définie sur
true, les utilisateurs sans accès aux branches protégées peuvent lire et écrire dans les clés de cache utilisées par les branches protégées.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge :
true ou false (par défaut).Exemple de cache:unprotect :
rspec:
script: test
cache:
unprotect: true
cache:when {#cachewhen}Utilisez cache:when pour définir quand enregistrer le cache, en fonction du statut du job.
Doit être utilisé avec cache: paths, sinon rien n'est mis en cache.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge :
on_success (par défaut) : Enregistrer le cache uniquement lorsque le job réussit.on_failure : Enregistrer le cache uniquement lorsque le job échoue.always : Toujours enregistrer le cache.Exemple de cache:when :
rspec:
script: rspec
cache:
paths:
- rspec/
when: 'always'
Cet exemple stocke le cache que le job échoue ou réussisse.
cache:policy {#cachepolicy}Pour modifier le comportement de téléchargement et de téléversement d'un cache, utilisez le mot-clé cache:policy. Par défaut, le job télécharge le cache au démarrage du job et téléverse les modifications du cache à la fin du job. Ce style de mise en cache est la politique pull-push (par défaut).
Pour configurer un job afin qu'il télécharge uniquement le cache au démarrage du job, mais ne téléverse jamais de modifications à la fin du job, utilisez cache:policy:pull.
Pour configurer un job afin qu'il téléverse uniquement un cache à la fin du job, mais ne télécharge jamais le cache au démarrage du job, utilisez cache:policy:push.
Utilisez la politique pull lorsque de nombreux jobs s'exécutent en parallèle et utilisent le même cache. Cette politique accélère l'exécution des jobs et réduit la charge sur le serveur de cache. Vous pouvez utiliser un job avec la politique push pour construire le cache.
Doit être utilisé avec cache: paths, sinon rien n'est mis en cache.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge :
pullpushpull-push (par défaut)Exemple de cache:policy :
prepare-dependencies-job:
stage: build
cache:
key: gems
paths:
- vendor/bundle
policy: push
script:
- echo "This job only downloads dependencies and builds the cache."
- echo "Downloading dependencies..."
faster-test-job:
stage: test
cache:
key: gems
paths:
- vendor/bundle
policy: pull
script:
- echo "This job script uses the cache, but does not update it."
- echo "Running tests..."
Sujets connexes :
cache:fallback_keys {#cachefallback_keys}Utilisez cache:fallback_keys pour spécifier une liste de clés à partir desquelles tenter de restaurer le cache si aucun cache n'est trouvé pour cache:key. Les caches sont récupérés dans l'ordre spécifié dans la section fallback_keys.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge :
Exemple de cache:fallback_keys :
rspec:
script: rspec
cache:
key: gems-$CI_COMMIT_REF_SLUG
paths:
- rspec/
fallback_keys:
- gems
when: 'always'
coverage {#coverage}Utilisez coverage avec une expression régulière personnalisée pour configurer la façon dont la couverture de code est extraite de la sortie du job. GitLab affiche le pourcentage correspondant dans le widget MR, la liste des jobs du pipeline et les graphiques analytiques.
Valeurs prises en charge :
/. Doit correspondre au numéro de couverture. Peut également correspondre au texte environnant, vous n'avez donc pas besoin d'utiliser un groupe de caractères d'expression régulière pour capturer le numéro exact. Étant donné qu'il utilise la syntaxe RE2, tous les groupes doivent être non capturants.Exemple de coverage :
job1:
script: rspec
coverage: '/Code coverage: \d+(?:\.\d+)?/'
Dans cet exemple :
Code coverage: 67.89% of lines covered correspond.\d+(?:\.\d+)? pour extraire le numéro. L'expression régulière exemple correspond à 67.89.Informations complémentaires :
artifacts:reports:coverage_report séparément. La configuration de l'un n'active pas l'autre.Sujets connexes :
dast_configuration {#dast_configuration}{{< details >}}
{{< /details >}}
Utilisez le mot-clé dast_configuration pour spécifier un profil de site et un profil de scanner à utiliser dans une configuration CI/CD. Les deux profils doivent d'abord avoir été créés dans le projet. L'étape du job doit être dast.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans le cadre d'un job.
Valeurs prises en charge : Un de chaque : site_profile et scanner_profile.
site_profile pour spécifier le profil de site à utiliser dans le job.scanner_profile pour spécifier le profil de scanner à utiliser dans le job.Exemple de dast_configuration :
stages:
- build
- dast
include:
- template: DAST.gitlab-ci.yml
dast:
dast_configuration:
site_profile: "Example Co"
scanner_profile: "Quick Passive Test"
Dans cet exemple, le job dast étend la configuration dast ajoutée avec le mot-clé include pour sélectionner un profil de site et un profil de scanner spécifiques.
Informations complémentaires :
Sujets connexes :
dependencies {#dependencies}Utilisez le mot-clé dependencies pour définir une liste de jobs spécifiques à partir desquels récupérer des artefacts. Les jobs spécifiés doivent tous se trouver dans des étapes antérieures. Vous pouvez également configurer un job pour qu'il ne télécharge aucun artefact.
Lorsque dependencies n'est pas défini dans un job, tous les jobs des étapes antérieures sont considérés comme dépendants et le job récupère tous les artefacts de ces jobs.
Pour récupérer des artefacts d'un job à la même étape, vous devez utiliser needs:artifacts. Vous ne devriez pas combiner dependencies avec needs dans le même job.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
[]), pour configurer le job afin qu'il ne télécharge aucun artefact.Exemple de dependencies :
build mac:
stage: build
script: make build:mac
artifacts:
paths:
- binaries/
build linux:
stage: build
script: make build:linux
artifacts:
paths:
- binaries/
test mac:
stage: test
script: make test:mac
dependencies:
- build mac
test linux:
stage: test
script: make test:linux
dependencies:
- build linux
deploy:
stage: deploy
script: make deploy
environment: production
Dans cet exemple, deux jobs ont des artefacts : build mac et build linux. Lorsque test mac est exécuté, les artefacts de build mac sont téléchargés et extraits dans le contexte de la build. La même chose se produit pour test linux et les artefacts de build linux.
Le job deploy télécharge les artefacts de tous les jobs précédents en raison de la priorité des étapes.
Informations complémentaires :
environment {#environment}Utilisez environment pour définir l'environnement vers lequel un job se déploie.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge : Le nom de l'environnement vers lequel le job se déploie, dans l'un des formats suivants :
-, _, /, $, {, }..gitlab-ci.yml. Vous ne pouvez pas utiliser les variables définies dans une section script.Exemple de environment :
deploy to production:
stage: deploy
script: git push production HEAD:main
environment: production
Informations complémentaires :
environment et qu'aucun environnement portant ce nom n'existe, un environnement est créé.environment:name {#environmentname}Définissez un nom pour un environnement.
Les noms d'environnements courants sont qa, staging et production, mais vous pouvez utiliser n'importe quel nom.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge : Le nom de l'environnement vers lequel le job se déploie, dans l'un des formats suivants :
-, _, /, $, {, }..gitlab-ci.yml. Vous ne pouvez pas utiliser les variables définies dans une section script.Exemple de environment:name :
deploy to production:
stage: deploy
script: git push production HEAD:main
environment:
name: production
environment:url {#environmenturl}Définissez une URL pour un environnement.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge : Une URL unique, dans l'un des formats suivants :
https://prod.example.com..gitlab-ci.yml. Vous ne pouvez pas utiliser les variables définies dans une section script.Exemple de environment:url :
deploy to production:
stage: deploy
script: git push production HEAD:main
environment:
name: production
url: https://prod.example.com
Informations complémentaires :
environment:on_stop {#environmenton_stop}La fermeture (l'arrêt) des environnements peut être effectuée avec le mot-clé on_stop défini sous environment. Il déclare un job différent qui s'exécute pour fermer l'environnement.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Informations complémentaires :
environment:action pour plus de détails et un exemple.environment:action {#environmentaction}Utilisez le mot-clé action pour spécifier comment le job interagit avec l'environnement.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge : L'un des mots-clés suivants :
| Valeur | Description |
|---|---|
start | Valeur par défaut. Indique que le job démarre l'environnement. Le déploiement est créé après le démarrage du job. |
prepare | Indique que le job prépare uniquement l'environnement. Il ne déclenche pas de déploiements. En savoir plus sur la préparation des environnements. |
stop | Indique que le job arrête un environnement. En savoir plus sur l'arrêt d'un environnement. |
verify | Indique que le job vérifie uniquement l'environnement. Il ne déclenche pas de déploiements. En savoir plus sur la vérification des environnements. |
access | Indique que le job accède uniquement à l'environnement. Il ne déclenche pas de déploiements. En savoir plus sur l'accès aux environnements. |
Exemple de environment:action :
stop_review_app:
stage: deploy
variables:
GIT_STRATEGY: none
script: make delete-app
when: manual
environment:
name: review/$CI_COMMIT_REF_SLUG
action: stop
environment:auto_stop_in {#environmentauto_stop_in}{{< history >}}
prepare, access et verify dans GitLab 17.7.{{< /history >}}
Le mot-clé auto_stop_in spécifie la durée de vie de l'environnement. Lorsqu'un environnement expire, GitLab l'arrête automatiquement.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge : Une durée exprimée en langage naturel. Par exemple, ces valeurs sont toutes équivalentes :
168 hours7 daysone weekneverLes variables CI/CD sont prises en charge.
Exemple de environment:auto_stop_in :
review_app:
script: deploy-review-app
environment:
name: review/$CI_COMMIT_REF_SLUG
auto_stop_in: 1 day
Lorsque l'environnement pour review_app est créé, la durée de vie de l'environnement est définie sur 1 day. Chaque fois que l'environnement éphémère est déployé, cette durée de vie est également réinitialisée à 1 day.
Le mot-clé auto_stop_in peut être utilisé pour toutes les actions d'environnement sauf stop. Certaines actions peuvent être utilisées pour réinitialiser l'heure d'arrêt planifiée de l'environnement. Pour plus d'informations, voir Accéder à un environnement à des fins de préparation ou de vérification.
Sujets connexes :
environment:kubernetes {#environmentkubernetes}{{< history >}}
agent a été introduit dans GitLab 17.6.namespace et flux_resource_path ont été introduits dans GitLab 17.7.namespace et flux_resource_path ont été dépréciés dans GitLab 18.4.dashboard:namespace et dashboard:flux_resource_path ont été introduits dans GitLab 18.4.{{< /history >}}
Utilisez le mot-clé kubernetes pour configurer le tableau de bord pour Kubernetes et les ressources Kubernetes gérées par GitLab pour un environnement.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
agent : Une chaîne spécifiant l'agent GitLab pour Kubernetes. Le format est path/to/agent/project:agent-name. Si l'agent est connecté au projet exécutant le pipeline, utilisez $CI_PROJECT_PATH:agent-name.dashboard:namespace : Une chaîne représentant l'espace de nommage Kubernetes où l'environnement est déployé. L'espace de nommage doit être défini conjointement avec le mot-clé agent. namespace est déprécié.dashboard:flux_resource_path : Une chaîne représentant le chemin complet vers la ressource Flux, telle qu'une HelmRelease. La ressource Flux doit être définie conjointement avec les mots-clés agent et dashboard:namespace. flux_resource_path est déprécié.managed_resources : Un hash avec le mot-clé enabled pour configurer les ressources Kubernetes gérées par GitLab pour l'environnement.
managed_resources:enabled : Une valeur booléenne indiquant si les ressources Kubernetes gérées par GitLab sont activées pour l'environnement.dashboard : Un hash avec les mots-clés dashboard:namespace et dashboard:flux_resource_path pour configurer le tableau de bord pour Kubernetes pour l'environnement.Exemple de environment:kubernetes :
deploy:
stage: deploy
script: make deploy-app
environment:
name: production
kubernetes:
agent: path/to/agent/project:agent-name
dashboard:
namespace: my-namespace
flux_resource_path: helm.toolkit.fluxcd.io/v2/namespaces/flux-system/helmreleases/helm-release-resource
Exemple de environment:kubernetes lors de la désactivation des ressources gérées :
deploy:
stage: deploy
script: make deploy-app
environment:
name: production
kubernetes:
agent: path/to/agent/project:agent-name
managed_resources:
enabled: false
dashboard:
namespace: my-namespace
flux_resource_path: helm.toolkit.fluxcd.io/v2/namespaces/flux-system/helmreleases/helm-release-resource
Cette configuration :
deploy pour se déployer dans l'environnement production.agent-name à l'environnement.my-namespace et flux_resource_path défini sur helm.toolkit.fluxcd.io/v2/namespaces/flux-system/helmreleases/helm-release-resource.Informations complémentaires :
user_access pour le projet de l'environnement ou son groupe parent.agent, namespace et flux_resource_path.agent, vous n'avez pas à définir namespace, et ne pouvez pas définir flux_resource_path. Cependant, cette configuration liste tous les espaces de nommage d'un cluster dans le tableau de bord pour Kubernetes.environment:deployment_tier {#environmentdeployment_tier}{{< history >}}
{{< /history >}}
Utilisez le mot-clé deployment_tier pour spécifier le niveau de l'environnement de déploiement.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge : L'une des valeurs suivantes :
productionstagingtestingdevelopmentother.gitlab-ci.yml. Vous ne pouvez pas utiliser les variables définies dans une section script.Exemple de environment:deployment_tier :
deploy:
script: echo
environment:
name: customer-portal
deployment_tier: production
Informations complémentaires :
Sujets connexes :
Utilisez des variables CI/CD pour nommer les environnements de manière dynamique.
Par exemple :
deploy as review app:
stage: deploy
script: make deploy
environment:
name: review/$CI_COMMIT_REF_SLUG
url: https://$CI_ENVIRONMENT_SLUG.example.com/
Le job deploy as review app est marqué comme un déploiement pour créer dynamiquement l'environnement review/$CI_COMMIT_REF_SLUG. $CI_COMMIT_REF_SLUG est une variable CI/CD définie par le runner. La variable $CI_ENVIRONMENT_SLUG est basée sur le nom de l'environnement, mais adaptée pour être incluse dans les URLs. Si le job deploy as review app s'exécute dans une branche nommée pow, cet environnement serait accessible avec une URL comme https://review-pow.example.com/.
Le cas d'utilisation courant est de créer des environnements dynamiques pour les branches et de les utiliser comme environnements éphémères. Vous pouvez voir un exemple qui utilise des environnements éphémères à l'adresse https://gitlab.com/gitlab-examples/review-apps-nginx/.
extends {#extends}Utilisez extends pour réutiliser des sections de configuration. C'est une alternative aux ancres YAML et est un peu plus flexible et lisible.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
Exemple de extends :
.tests:
stage: test
image: ruby:3.0
rspec:
extends: .tests
script: rake rspec
rubocop:
extends: .tests
script: bundle exec rubocop
Dans cet exemple, le job rspec utilise la configuration du job modèle .tests. Lors de la création du pipeline, GitLab :
.tests avec le job rspec.La configuration combinée est équivalente à ces jobs :
rspec:
stage: test
image: ruby:3.0
script: rake rspec
rubocop:
stage: test
image: ruby:3.0
script: bundle exec rubocop
Informations complémentaires :
extends.extends prend en charge jusqu'à onze niveaux d'héritage, mais vous devriez éviter d'en utiliser plus de trois..tests est un job masqué, mais vous pouvez également étendre la configuration à partir de jobs ordinaires.Sujets connexes :
extends.extends pour réutiliser la configuration des fichiers de configuration inclus.hooks {#hooks}{{< history >}}
ci_hooks_pre_get_sources_script. Désactivé par défaut.ci_hooks_pre_get_sources_script a été supprimé.{{< /history >}}
Utilisez hooks pour spécifier des listes de commandes à exécuter sur le runner à certaines étapes de l'exécution du job, par exemple avant la récupération du dépôt Git.
La configuration du job et la configuration par défaut ne sont pas fusionnées. Si le pipeline a default:hooks défini, et que le job a également hooks, la configuration du job est prioritaire et la configuration par défaut n'est pas utilisée.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge :
pre_get_sources_script.hooks:pre_get_sources_script {#hookspre_get_sources_script}{{< history >}}
ci_hooks_pre_get_sources_script. Désactivé par défaut.ci_hooks_pre_get_sources_script a été supprimé.{{< /history >}}
Utilisez hooks:pre_get_sources_script pour spécifier une liste de commandes à exécuter sur le runner avant le clonage du dépôt Git et de ses sous-modules. Vous pouvez l'utiliser par exemple pour :
Valeurs prises en charge : Un tableau comprenant :
Les variables CI/CD sont prises en charge.
Exemple de hooks:pre_get_sources_script :
job1:
hooks:
pre_get_sources_script:
- echo 'hello job1 pre_get_sources_script'
script: echo 'hello job1 script'
Sujets connexes :
identity {#identity}{{< details >}}
{{< /details >}}
{{< history >}}
google_cloud_support_feature_flag. Cette fonctionnalité est en bêta.google_cloud_support_feature_flag a été supprimé.{{< /history >}}
Cette fonctionnalité est en bêta.
Utilisez identity pour vous authentifier auprès de services tiers à l'aide de la fédération d'identités.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge : Un identifiant. Fournisseurs pris en charge :
google_cloud : Google Cloud. Doit être configuré avec l'intégration Google Cloud IAM.Exemple de identity :
job_with_workload_identity:
identity: google_cloud
script:
- gcloud compute instances list
Sujets connexes :
id_tokens {#id_tokens}{{< history >}}
{{< /history >}}
Utilisez id_tokens pour créer des tokens d'identité afin de vous authentifier auprès de services tiers. Tous les JWT créés de cette façon prennent en charge l'authentification OIDC. Le sous-mot-clé requis aud est utilisé pour configurer la revendication aud pour le JWT.
La configuration du job et la configuration par défaut ne sont pas fusionnées. Si le pipeline a default:id_tokens défini, et que le job a également id_tokens, la configuration du job est prioritaire et la configuration par défaut n'est pas utilisée.
Valeurs prises en charge :
aud. aud prend en charge :
Exemple de id_tokens :
job_with_id_tokens:
id_tokens:
ID_TOKEN_1:
aud: https://vault.example.com
ID_TOKEN_2:
aud:
- https://gcp.com
- https://aws.com
SIGSTORE_ID_TOKEN:
aud: sigstore
script:
- command_to_authenticate_with_vault $ID_TOKEN_1
- command_to_authenticate_with_aws $ID_TOKEN_2
- command_to_authenticate_with_gcp $ID_TOKEN_2
Sujets connexes :
image {#image}Utilisez image pour spécifier une image Docker dans laquelle le job s'exécute.
La configuration du job et la configuration par défaut ne sont pas fusionnées. Si le pipeline a default:image défini, et que le job a également image, la configuration du job est prioritaire et la configuration par défaut n'est pas utilisée.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge : Le nom de l'image, y compris le chemin de registre si nécessaire, dans l'un des formats suivants :
<image-name> (identique à l'utilisation de <image-name> avec le tag latest)<image-name>:<tag><image-name>@<digest>Les variables CI/CD sont prises en charge.
Exemple de image :
default:
image: ruby:3.0
rspec:
script: bundle exec rspec
rspec 2.7:
image: registry.example.com/my-group/my-project/ruby:2.7
script: bundle exec rspec
Dans cet exemple, l'image ruby:3.0 est celle par défaut pour tous les jobs du pipeline. Le job rspec 2.7 n'utilise pas la valeur par défaut, car il la remplace par une section image spécifique au job.
Informations complémentaires :
image au niveau supérieur, mais pas dans la section default, est dépréciée.Sujets connexes :
image:name {#imagename}Le nom de l'image Docker dans laquelle le job s'exécute. Similaire à image utilisé seul.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge : Le nom de l'image, y compris le chemin de registre si nécessaire, dans l'un des formats suivants :
<image-name> (identique à l'utilisation de <image-name> avec le tag latest)<image-name>:<tag><image-name>@<digest>Les variables CI/CD sont prises en charge.
Exemple de image:name :
test-job:
image:
name: "registry.example.com/my/image:latest"
script: echo "Hello world"
Sujets connexes :
image:entrypoint {#imageentrypoint}Commande ou script à exécuter comme point d'entrée du conteneur.
Lors de la création du conteneur Docker, entrypoint est traduit en option Docker --entrypoint. La syntaxe est similaire à la directive ENTRYPOINT du Dockerfile, où chaque token shell est une chaîne séparée dans le tableau.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge :
Exemple de image:entrypoint :
test-job:
image:
name: super/sql:experimental
entrypoint: [""]
script: echo "Hello world"
Sujets connexes :
image:docker {#imagedocker}{{< history >}}
user a été introduite dans GitLab 16.8.{{< /history >}}
Utilisez image:docker pour transmettre des options aux runners utilisant l'exécuteur Docker ou l'exécuteur Kubernetes. Ce mot-clé ne fonctionne pas avec les autres types d'exécuteurs.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge :
Un hash d'options pour l'exécuteur Docker, qui peut inclure :
platform : Sélectionne l'architecture de l'image à télécharger. Lorsqu'elle n'est pas spécifiée, la valeur par défaut est la même plateforme que le runner hôte.user : Spécifiez le nom d'utilisateur ou l'UID à utiliser lors de l'exécution du conteneur.Exemple de image:docker :
arm-sql-job:
script: echo "Run sql tests"
image:
name: super/sql:experimental
docker:
platform: arm64/v8
user: dave
Informations complémentaires :
image:docker:platform correspond à l'option docker pull --platform.image:docker:user correspond à l'option docker run --user.image:kubernetes {#imagekubernetes}{{< history >}}
user a été introduite dans GitLab Runner 17.11.user a été étendue pour prendre en charge le format uid:gid dans GitLab 18.0.{{< /history >}}
Utilisez image:kubernetes pour transmettre des options à l'exécuteur Kubernetes de GitLab Runner. Ce mot-clé ne fonctionne pas avec les autres types d'exécuteurs.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge :
Un hash d'options pour l'exécuteur Kubernetes, qui peut inclure :
user : Spécifiez le nom d'utilisateur ou l'UID à utiliser lors de l'exécution du conteneur. Vous pouvez également l'utiliser pour définir le GID en utilisant le format UID:GID.Exemple de image:kubernetes avec l'UID uniquement :
arm-sql-job:
script: echo "Run sql tests"
image:
name: super/sql:experimental
kubernetes:
user: "1001"
Exemple de image:kubernetes avec l'UID et le GID :
arm-sql-job:
script: echo "Run sql tests"
image:
name: super/sql:experimental
kubernetes:
user: "1001:1001"
image:pull_policy {#imagepull_policy}{{< history >}}
ci_docker_image_pull_policy. Désactivé par défaut.ci_docker_image_pull_policy supprimé.{{< /history >}}
La politique d'extraction que le runner utilise pour récupérer l'image Docker.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge :
always, if-not-present ou never.Exemples de image:pull_policy :
job1:
script: echo "A single pull policy."
image:
name: ruby:3.0
pull_policy: if-not-present
job2:
script: echo "Multiple pull policies."
image:
name: ruby:3.0
pull_policy: [always, if-not-present]
Informations complémentaires :
ERROR: Job failed (system failure): the configured PullPolicies ([always]) are not allowed by AllowedPullPolicies ([never]).Sujets connexes :
inputs {#inputs}{{< history >}}
{{< /history >}}
Utilisez inputs pour définir des entrées typées et validées pour un job. Les entrées de job peuvent être remplacées lors de l'exécution ou de la relance manuelle d'un job.
Les entrées de job sont des paramètres qui fournissent la sécurité des types et la validation. Contrairement aux variables CI/CD, seules les entrées explicitement définies dans le job peuvent être spécifiées lors de l'exécution ou de la relance du job. Tous les noms d'entrées de job doivent être prédéfinis.
Référencez les valeurs d'entrée de job avec la syntaxe d'expression Moa ${{ job.inputs.INPUT_NAME }}.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
Un hash de noms d'entrées, où chaque entrée est configurée avec un ou plusieurs sous-mots-clés :
default (requis)typeoptionsdescriptionregexExemple de inputs :
test_job:
inputs:
test_suite:
default: unit
description: Which test suite to run
options: [unit, integration, e2e]
parallel_count:
type: number
default: 5
description: Number of parallel test runners
verbose:
type: boolean
default: false
description: Enable verbose test output
script:
- 'echo "Running ${{ job.inputs.test_suite }} tests"'
- 'if [ "${{ job.inputs.verbose }}" == "true" ]; then export TEST_VERBOSE=1; fi'
- ./run_tests.sh --suite ${{ job.inputs.test_suite }} --parallel ${{ job.inputs.parallel_count }}
Informations complémentaires :
inputs:default {#inputsdefault}Toutes les entrées de job doivent avoir une valeur par défaut définie avec default.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge : Toute valeur correspondant au type de l'entrée.
Exemple de inputs:default :
test_job:
inputs:
environment:
default: staging
timeout:
type: number
default: 30
inputs:type {#inputstype}Utilisez type pour définir le type de données de la valeur d'entrée.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
string (par défaut)numberbooleanarray.Exemple de inputs:type :
test_job:
inputs:
count:
type: number
default: 5
enabled:
type: boolean
default: true
inputs:description {#inputsdescription}Utilisez description pour fournir des informations sur l'objectif de l'entrée. La description n'a pas d'effet sur le comportement de l'entrée.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge : Une chaîne de caractères.
Exemple de inputs:description :
deploy_job:
inputs:
environment:
default: staging
description: Target deployment environment
inputs:options {#inputsoptions}Utilisez options pour spécifier une liste de valeurs autorisées pour une entrée.
La valeur d'entrée doit correspondre exactement à l'une des options listées (sensible à la casse). La validation échoue si la valeur ne correspond à aucune option.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge : Un tableau de valeurs autorisées.
Exemple de inputs:options :
deploy_job:
inputs:
environment:
default: staging
options: [development, staging, production]
inputs:regex {#inputsregex}Utilisez regex pour spécifier un modèle d'expression régulière auquel la valeur d'entrée doit correspondre.
La validation échoue si la valeur ne correspond pas à l'expression régulière.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge : Une chaîne d'expression régulière.
Exemple de inputs:regex :
deploy_job:
inputs:
version:
default: v1.0.0
regex: ^v\d+\.\d+\.\d+$
Dans cet exemple, une valeur d'entrée v1.1.1 passe la validation regex, mais une entrée v1.1.1-beta ne la passe pas.
inherit {#inherit}Utilisez inherit pour contrôler l'héritage des mots-clés par défaut et des variables.
inherit:default {#inheritdefault}Utilisez inherit:default pour contrôler l'héritage des mots-clés par défaut.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
true (par défaut) ou false pour activer ou désactiver l'héritage de tous les mots-clés par défaut.Exemple de inherit:default :
default:
retry: 2
image: ruby:3.0
interruptible: true
job1:
script: echo "This job does not inherit any default keywords."
inherit:
default: false
job2:
script: echo "This job inherits only the two listed default keywords. It does not inherit 'interruptible'."
inherit:
default:
- retry
- image
Informations complémentaires :
default: [keyword1, keyword2]inherit:variables {#inheritvariables}Utilisez inherit:variables pour contrôler l'héritage des mots-clés de variables par défaut.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
true (par défaut) ou false pour activer ou désactiver l'héritage de toutes les variables par défaut.Exemple de inherit:variables :
variables:
VARIABLE1: "This is default variable 1"
VARIABLE2: "This is default variable 2"
VARIABLE3: "This is default variable 3"
job1:
script: echo "This job does not inherit any default variables."
inherit:
variables: false
job2:
script: echo "This job inherits only the two listed default variables. It does not inherit 'VARIABLE3'."
inherit:
variables:
- VARIABLE1
- VARIABLE2
Informations complémentaires :
variables: [VARIABLE1, VARIABLE2]interruptible {#interruptible}{{< history >}}
trigger a été introduite dans GitLab 16.8.{{< /history >}}
Utilisez interruptible pour configurer la fonctionnalité d'annulation automatique des pipelines redondants afin d'annuler un job avant qu'il ne se termine si un nouveau pipeline sur la même référence démarre pour un commit plus récent. Si la fonctionnalité est désactivée, le mot-clé n'a aucun effet. Le nouveau pipeline doit concerner un commit avec de nouvelles modifications. Par exemple, la fonctionnalité Annulation automatique des pipelines redondants n'a aucun effet si vous sélectionnez Nouveau pipeline dans l'interface utilisateur pour exécuter un pipeline pour le même commit.
Le comportement de la fonctionnalité Annulation automatique des pipelines redondants peut être contrôlé par le paramètre workflow:auto_cancel:on_new_commit.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge :
true ou false (par défaut).Exemple de interruptible avec le comportement par défaut :
workflow:
auto_cancel:
on_new_commit: conservative # the default behavior
stages:
- stage1
- stage2
- stage3
step-1:
stage: stage1
script:
- echo "Can be canceled."
interruptible: true
step-2:
stage: stage2
script:
- echo "Can not be canceled."
step-3:
stage: stage3
script:
- echo "Because step-2 can not be canceled, this step can never be canceled, even though it's set as interruptible."
interruptible: true
Dans cet exemple, un nouveau pipeline entraîne l'annulation d'un pipeline en cours d'exécution :
step-1 est en cours d'exécution ou en attente.step-2.Exemple de interruptible avec le paramètre auto_cancel:on_new_commit:interruptible :
workflow:
auto_cancel:
on_new_commit: interruptible
stages:
- stage1
- stage2
- stage3
step-1:
stage: stage1
script:
- echo "Can be canceled."
interruptible: true
step-2:
stage: stage2
script:
- echo "Can not be canceled."
step-3:
stage: stage3
script:
- echo "Can be canceled."
interruptible: true
Dans cet exemple, un nouveau pipeline entraîne l'annulation de step-1 et step-3 par un pipeline en cours d'exécution s'ils sont en cours d'exécution ou en attente.
Informations complémentaires :
interruptible: true uniquement si le job peut être annulé en toute sécurité après son démarrage, comme un job de build. Les jobs de déploiement ne devraient généralement pas être annulés, afin d'éviter les déploiements partiels.workflow:auto_cancel:on_new_commit: conservative :
interruptible: true, quelle que soit la configuration du job. La configuration interruptible n'est prise en compte qu'après le démarrage du job.interruptible: true ou si aucun job configuré avec interruptible: false n'a démarré à quelque moment que ce soit. Une fois qu'un job avec interruptible: false démarre, l'ensemble du pipeline n'est plus considéré comme interruptible.interruptible: false dans le pipeline downstream n'a encore démarré, le pipeline downstream est également annulé.interruptible: false dans la première étape d'un pipeline pour permettre aux utilisateurs d'empêcher manuellement l'annulation automatique d'un pipeline. Une fois qu'un utilisateur démarre le job, le pipeline ne peut plus être annulé par la fonctionnalité Annulation automatique des pipelines redondants.interruptible avec un déclencheur de job :
interruptible du déclencheur de job.workflow:auto_cancel est défini sur conservative, la configuration interruptible du déclencheur de job n'a aucun effet.workflow:auto_cancel est défini sur interruptible, un déclencheur de job avec interruptible: true peut être annulé automatiquement.needs {#needs}Utilisez needs pour exécuter des jobs dans un ordre différent. Les relations entre les jobs qui utilisent needs peuvent être visualisées sous forme de graphe acyclique dirigé.
Vous pouvez ignorer l'ordre des étapes et exécuter certains jobs sans attendre que d'autres se terminent. Les jobs de plusieurs étapes peuvent s'exécuter simultanément.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
[]), pour que le job démarre dès que le pipeline est créé.Exemple de needs :
linux:build:
stage: build
script: echo "Building linux..."
mac:build:
stage: build
script: echo "Building mac..."
lint:
stage: test
needs: []
script: echo "Linting..."
linux:rspec:
stage: test
needs: ["linux:build"]
script: echo "Running rspec on linux..."
mac:rspec:
stage: test
needs: ["mac:build"]
script: echo "Running rspec on mac..."
production:
stage: deploy
script: echo "Running production..."
environment: production
Cet exemple crée quatre chemins d'exécution :
lint s'exécute immédiatement sans attendre que l'étape build se termine, car il n'a aucune dépendance (needs: []).linux:rspec s'exécute dès que le job linux:build se termine, sans attendre que mac:build se termine.mac:rspec s'exécute dès que le job mac:build se termine, sans attendre que linux:build se termine.production s'exécute dès que tous les jobs précédents se terminent : lint, linux:build, linux:rspec, mac:build, mac:rspec.Informations complémentaires :
needs est limité :
needs fait référence à un job qui utilise le mot-clé parallel, il dépend de tous les jobs créés en parallèle, pas seulement d'un seul job. Il télécharge également les artefacts de tous les jobs parallèles par défaut. Si les artefacts ont le même nom, ils s'écrasent mutuellement et seul le dernier téléchargé est sauvegardé.
needs fasse référence à un sous-ensemble de jobs parallélisés (et non à la totalité des jobs parallélisés), utilisez le mot-clé needs:parallel:matrix.needs fait référence à un job qui pourrait ne pas être ajouté à un pipeline en raison de only, except ou rules, la création du pipeline pourrait échouer. Utilisez le mot-clé needs:optional pour résoudre un échec de création de pipeline.needs: [] et des jobs à l'étape .pre, ils démarreront tous dès que le pipeline est créé. Les jobs avec needs: [] démarrent immédiatement, et les jobs à l'étape .pre démarrent également immédiatement.needs:artifacts {#needsartifacts}Lorsqu'un job utilise needs, il ne télécharge plus par défaut tous les artefacts des étapes précédentes, car les jobs avec needs peuvent démarrer avant que les étapes antérieures ne se terminent. Avec needs, vous pouvez uniquement télécharger les artefacts des jobs listés dans la configuration needs.
Utilisez artifacts: true (par défaut) ou artifacts: false pour contrôler le moment où les artefacts sont téléchargés dans les jobs qui utilisent needs.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job. Doit être utilisé avec needs:job.
Valeurs prises en charge :
true (par défaut) ou false.Exemple de needs:artifacts :
test-job1:
stage: test
needs:
- job: build_job1
artifacts: true
test-job2:
stage: test
needs:
- job: build_job2
artifacts: false
test-job3:
needs:
- job: build_job1
artifacts: true
- job: build_job2
- build_job3
Dans cet exemple :
test-job1 job télécharge les artefacts de build_job1test-job2 job ne télécharge pas les artefacts de build_job2.test-job3 job télécharge les artefacts des trois build_jobs, car artifacts est true, ou utilise la valeur par défaut true, pour les trois jobs requis.Informations complémentaires :
needs avec dependencies dans le même job.needs:project {#needsproject}{{< details >}}
{{< /details >}}
Utilisez needs:project pour télécharger des artefacts depuis cinq jobs au maximum dans d'autres pipelines. Les artefacts sont téléchargés depuis la dernière exécution réussie du job spécifié pour la référence spécifiée. Pour spécifier plusieurs jobs, ajoutez chacun d'eux en tant qu'élément de tableau distinct sous le mot-clé needs.
Si un pipeline est en cours d'exécution pour la référence, un job avec needs:project n'attend pas que le pipeline se termine. À la place, les artefacts sont téléchargés depuis la dernière exécution réussie du job spécifié.
needs:project doit être utilisé avec job, ref et artifacts.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
needs:project : Un chemin de projet complet, incluant l'espace de nommage et le groupe.job : Le job à partir duquel télécharger les artefacts.ref : La référence à partir de laquelle télécharger les artefacts.artifacts : Doit être true pour télécharger les artefacts.Exemples de needs:project :
build_job:
stage: build
script:
- ls -lhR
needs:
- project: namespace/group/project-name
job: build-1
ref: main
artifacts: true
- project: namespace/group/project-name-2
job: build-2
ref: main
artifacts: true
Dans cet exemple, build_job télécharge les artefacts des dernières exécutions réussies des jobs build-1 et build-2 sur les branches main dans les projets group/project-name et group/project-name-2.
Vous pouvez utiliser des variables CI/CD dans needs:project, par exemple :
build_job:
stage: build
script:
- ls -lhR
needs:
- project: $CI_PROJECT_PATH
job: $DEPENDENCY_JOB_NAME
ref: $ARTIFACTS_DOWNLOAD_REF
artifacts: true
Informations complémentaires :
project comme étant le même que le projet actuel, mais utilisez une référence différente de celle du pipeline actuel. Des pipelines s'exécutant simultanément sur la même référence pourraient écraser les artefacts.needs:project dans le même job que trigger.needs:project pour télécharger des artefacts depuis un autre pipeline, le job n'attend pas que le job requis se termine. L'utilisation de needs pour attendre la fin des jobs est limitée aux jobs du même pipeline. Assurez-vous que le job requis dans l'autre pipeline se termine avant que le job qui en dépend tente de télécharger les artefacts.parallel.project, job et ref.Sujets connexes :
needs:pipeline:job.needs:pipeline:job {#needspipelinejob}Un pipeline enfant peut télécharger des artefacts depuis un job terminé avec succès dans son pipeline parent ou dans un autre pipeline enfant de la même hiérarchie de pipeline parent-enfant.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
needs:pipeline : Un identifiant de pipeline. Doit être un pipeline présent dans la même hiérarchie de pipeline parent-enfant.job : Le job à partir duquel télécharger les artefacts.Exemple de needs:pipeline:job :
Pipeline parent (.gitlab-ci.yml) :
stages:
- build
- test
create-artifact:
stage: build
script: echo "sample artifact" > artifact.txt
artifacts:
paths: [artifact.txt]
child-pipeline:
stage: test
trigger:
include: child.yml
strategy: mirror
variables:
PARENT_PIPELINE_ID: $CI_PIPELINE_ID
Pipeline enfant (child.yml) :
use-artifact:
script: cat artifact.txt
needs:
- pipeline: $PARENT_PIPELINE_ID
job: create-artifact
Dans cet exemple, le create-artifact job dans le pipeline parent crée des artefacts. Le child-pipeline job déclenche un pipeline enfant et transmet la variable CI_PIPELINE_ID au pipeline enfant en tant que nouvelle variable PARENT_PIPELINE_ID. Le pipeline enfant peut utiliser cette variable dans needs:pipeline pour télécharger des artefacts depuis le pipeline parent. Le fait d'avoir les jobs create-artifact et child-pipeline dans des étapes successives garantit que le use-artifact job ne s'exécute que lorsque create-artifact s'est terminé avec succès.
Informations complémentaires :
pipeline n'accepte pas l'identifiant du pipeline actuel ($CI_PIPELINE_ID). Pour télécharger des artefacts depuis un job du pipeline actuel, utilisez needs:artifacts.needs:pipeline:job dans un job de déclenchement, ni pour récupérer des artefacts depuis un pipeline multi-projets. Pour récupérer des artefacts depuis un pipeline multi-projets, utilisez needs:project.needs:pipeline:job doit se terminer avec un statut success pour que les artefacts puissent être récupérés. Issue 367229 propose d'autoriser la récupération d'artefacts depuis n'importe quel job disposant d'artefacts.needs:optional {#needsoptional}Pour qu'un job qui n'existe parfois pas dans le pipeline soit requis, ajoutez optional: true à la configuration needs. Si non défini, optional: false est la valeur par défaut.
Les jobs qui utilisent rules, only ou except et qui sont ajoutés avec include peuvent ne pas toujours être ajoutés à un pipeline. GitLab vérifie les relations needs avant de démarrer un pipeline :
needs comporte optional: true et que le job requis est présent dans le pipeline, le job attend sa fin avant de démarrer.needs ne contient que des jobs optionnels et qu'aucun n'est ajouté au pipeline, le job démarre immédiatement (comme une entrée needs vide : needs: []).optional: false mais n'a pas été ajouté au pipeline, le pipeline échoue au démarrage avec une erreur du type : 'job1' job needs 'job2' job, but it was not added to the pipeline.Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Exemple de needs:optional :
build-job:
stage: build
test-job1:
stage: test
test-job2:
stage: test
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
deploy-job:
stage: deploy
needs:
- job: test-job2
optional: true
- job: test-job1
environment: production
review-job:
stage: deploy
needs:
- job: test-job2
optional: true
environment: review
Dans cet exemple :
build-job, test-job1 et test-job2 démarrent selon l'ordre des étapes.test-job2 est ajouté au pipeline, ainsi :
deploy-job attend que test-job1 et test-job2 se terminent.review-job attend que test-job2 se termine.test-job2 n'est pas ajouté au pipeline, ainsi :
deploy-job attend uniquement que test-job1 se termine et n'attend pas le test-job2 manquant.review-job n'a aucun autre job requis et démarre immédiatement (en même temps que build-job), comme needs: [].Informations complémentaires :
needs:optional avec needs:parallel:matrix.needs:pipeline {#needspipeline}Vous pouvez reproduire le statut d'un pipeline upstream dans un job en utilisant le mot-clé needs:pipeline. Le dernier statut du pipeline de la branche par défaut est répliqué vers le job.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
project. Par exemple : project: group/project-name ou project: project-name.Exemple de needs:pipeline :
upstream_status:
stage: test
needs:
pipeline: other/project
Informations complémentaires :
job à needs:pipeline, le job ne reproduit plus le statut du pipeline. Le comportement change pour adopter celui de needs:pipeline:job.needs:parallel:matrix {#needsparallelmatrix}{{< history >}}
{{< /history >}}
Les jobs peuvent utiliser parallel:matrix pour exécuter un job plusieurs fois en parallèle dans un même pipeline, mais avec des valeurs de variables différentes pour chaque instance du job.
Utilisez needs:parallel:matrix pour exécuter des jobs dans le désordre en fonction de jobs parallélisés.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job. Doit être utilisé avec needs:job.
Valeurs prises en charge : Un tableau de tables de hachage d'identifiants de matrice :
parallel:matrix job.Exemple de needs:parallel:matrix :
linux:build:
stage: build
script: echo "Building linux..."
parallel:
matrix:
- PROVIDER: aws
STACK:
- monitoring
- app1
- app2
linux:rspec:
stage: test
needs:
- job: linux:build
parallel:
matrix:
- PROVIDER: aws
STACK: app1
script: echo "Running rspec on linux..."
L'exemple précédent génère les jobs suivants :
linux:build: [aws, monitoring]
linux:build: [aws, app1]
linux:build: [aws, app2]
linux:rspec
Le linux:rspec job s'exécute dès que le linux:build: [aws, app1] job se termine.
Informations complémentaires :
Vous ne pouvez pas utiliser needs:parallel:matrix avec needs:optional.
L'ordre des identifiants de matrice dans needs:parallel:matrix doit correspondre à l'ordre des variables de matrice dans le job requis. Par exemple, inverser l'ordre des variables dans le linux:rspec job dans l'exemple précédent serait invalide :
linux:rspec:
stage: test
needs:
- job: linux:build
parallel:
matrix:
- STACK: app1 # The variable order does not match `linux:build` and is invalid.
PROVIDER: aws
script: echo "Running rspec on linux..."
Sujets connexes :
needs:parallel:matrix.pages {#pages}Utilisez pages pour définir un job GitLab Pages qui charge du contenu statique vers GitLab. Le contenu est ensuite publié sous forme de site web.
Vous devez :
pages: true pour publier un répertoire nommé publicpages.publish si vous souhaitez utiliser un autre répertoire de contenu.index.html non vide à la racine du répertoire de contenu.Type de mot-clé : Mot-clé de job ou nom de job (déprécié). Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
trueExemple de pages :
create-pages:
stage: deploy
script:
- mv my-html-content public
pages: true # specifies that this is a Pages job and publishes the default public directory
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
environment: production
Cet exemple renomme le répertoire my-html-content/ en public/. Ce répertoire est exporté en tant qu'artefact et publié avec GitLab Pages.
Exemple utilisant un hash de configuration :
create-pages:
stage: deploy
script:
- echo "nothing to do here"
pages: # specifies that this is a Pages job and publishes the default public directory
publish: my-html-content
expire_in: "1 week"
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
environment: production
Cet exemple ne déplace pas le répertoire, mais utilise directement la propriété publish. Il configure également le déploiement Pages pour qu'il soit dépublié après une semaine.
Informations complémentaires :
pages comme nom de job est dépréciée.pages comme nom de job sans déclencher de déploiement Pages, définissez la propriété pages sur falsepages.publish {#pagespublish}{{< history >}}
publish dans GitLab 17.9.publish sous le mot-clé pages dans GitLab 17.9.pages.publish à artifacts:paths dans GitLab 17.10.{{< /history >}}
Utilisez pages.publish pour configurer le répertoire de contenu d'un job pages.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans le cadre d'un pages job.
Valeurs prises en charge : Un chemin vers un répertoire contenant le contenu Pages. Dans GitLab 17.10 et versions ultérieures, si non spécifié, le répertoire par défaut public est utilisé et si spécifié, ce chemin est automatiquement ajouté à artifacts:paths.
Exemple de pages.publish :
create-pages:
stage: deploy
script:
- npx @11ty/eleventy --input=path/to/eleventy/root --output=dist
pages:
publish: dist # this path is automatically appended to artifacts:paths
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
environment: production
Cet exemple utilise Eleventy pour générer un site web statique et exporte les fichiers HTML générés dans le répertoire dist/. Ce répertoire est exporté en tant qu'artefact et publié avec GitLab Pages.
Il est également possible d'utiliser des variables dans le champ pages.publish. Par exemple :
create-pages:
stage: deploy
script:
- mkdir -p $CUSTOM_FOLDER/$CUSTOM_PATH
- cp -r public $CUSTOM_FOLDER/$CUSTOM_SUBFOLDER
pages:
publish: $CUSTOM_FOLDER/$CUSTOM_SUBFOLDER # this path is automatically appended to artifacts:paths
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
variables:
CUSTOM_FOLDER: "custom_folder"
CUSTOM_SUBFOLDER: "custom_subfolder"
Le chemin de publication spécifié doit être relatif à la racine du build.
Informations complémentaires :
publish de niveau supérieur est déprécié et doit désormais être imbriqué sous le mot-clé pagespages.path_prefix {#pagespath_prefix}{{< details >}}
{{< /details >}}
{{< history >}}
pages_multiple_versions_setting, désactivé par défaut.pages_multiple_versions_setting a été supprimé.{{< /history >}}
Utilisez pages.path_prefix pour configurer un préfixe de chemin pour les déploiements parallèles de GitLab Pages.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans le cadre d'un pages job.
Valeurs prises en charge :
La valeur donnée est convertie en minuscules et raccourcie à 63 octets. Tout caractère autre qu'un caractère alphanumérique ou un point est remplacé par un tiret. Les tirets ou les points en début et en fin de valeur ne sont pas autorisés.
Exemple de pages.path_prefix :
create-pages:
stage: deploy
script:
- echo "Pages accessible through ${CI_PAGES_URL}"
pages: # specifies that this is a Pages job and publishes the default public directory
path_prefix: "$CI_COMMIT_BRANCH"
Dans cet exemple, un déploiement Pages différent est créé pour chaque branche.
pages.expire_in {#pagesexpire_in}{{< details >}}
{{< /details >}}
{{< history >}}
{{< /history >}}
Utilisez expire_in pour spécifier la durée pendant laquelle un déploiement doit être disponible avant d'expirer. Une fois le déploiement expiré, il est désactivé par un job cron s'exécutant toutes les 10 minutes.
Par défaut, les déploiements parallèles expirent automatiquement après 24 heures. Pour désactiver ce comportement, définissez la valeur sur never.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans le cadre d'un pages job.
Valeurs prises en charge : La durée d'expiration. Si aucune unité n'est fournie, la durée est en secondes. Les variables sont également prises en charge. Les valeurs valides comprennent :
'42'42 seconds3 mins 4 sec2 hrs 20 min2h20min6 mos 1 day47 yrs 6 mos and 4d3 weeks and 2 daysnever$DURATIONExemple de pages.expire_in :
create-pages:
stage: deploy
script:
- echo "Pages accessible through ${CI_PAGES_URL}"
pages: # specifies that this is a Pages job and publishes the default public directory
expire_in: 1 week
parallel {#parallel}{{< history >}}
parallel passe de 50 à 200.{{< /history >}}
Utilisez parallel pour exécuter un job plusieurs fois en parallèle dans un même pipeline.
Plusieurs runners doivent exister, ou un seul runner doit être configuré pour exécuter plusieurs jobs simultanément.
Les jobs parallèles sont nommés séquentiellement de job_name 1/N à job_name N/N.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
1 et 200.Exemple de parallel :
test:
script: rspec
parallel: 5
Cet exemple crée 5 jobs s'exécutant en parallèle, nommés de test 1/5 à test 5/5.
Informations complémentaires :
CI_NODE_INDEX et CI_NODE_TOTAL.parallel peut :
pending en attendant qu'un runner soit disponible.job_activity_limit_exceeded si la création du pipeline amènerait le nombre total de jobs dans tous les pipelines actifs à dépasser la limite de l'instance.Sujets connexes :
parallel:matrix {#parallelmatrix}{{< history >}}
{{< /history >}}
Utilisez parallel:matrix pour exécuter un job plusieurs fois en parallèle dans un même pipeline, mais avec des valeurs de variables différentes pour chaque instance du job.
Plusieurs runners doivent exister, ou un seul runner doit être configuré pour exécuter plusieurs jobs simultanément.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge : Un tableau de tables de hachage de variables :
_).Exemple de parallel:matrix :
deploystacks:
stage: deploy
script:
- bin/deploy
parallel:
matrix:
- PROVIDER: aws
STACK:
- monitoring
- app1
- app2
- PROVIDER: [gcp, vultr]
STACK: [data, processing]
environment: $PROVIDER/$STACK
L'exemple génère 7 deploystacks jobs parallèles, chacun avec des valeurs différentes pour PROVIDER et STACK :
deploystacks: [aws, monitoring]deploystacks: [aws, app1]deploystacks: [aws, app2]deploystacks: [gcp, data]deploystacks: [gcp, processing]deploystacks: [vultr, data]deploystacks: [vultr, processing]Informations complémentaires :
Les jobs parallel:matrix ajoutent les valeurs de la matrice aux noms des jobs pour les différencier les uns des autres. Cependant, des valeurs longues peuvent entraîner des noms de jobs dépassant la limite de 255 caractères. Pour plus d'informations, consultez l'epic 11791.
Les valeurs des variables de matrice sont disponibles en tant que variables CI/CD dans les expressions rules:if. Pour plus d'informations, consultez Utiliser les variables de matrice dans rules:if.
Vous ne pouvez pas créer plusieurs configurations de matrice avec les mêmes valeurs mais des noms différents. Les noms des jobs sont générés à partir des valeurs de la matrice, et non des noms ; ainsi, les entrées de matrice avec des valeurs identiques génèrent des noms de jobs identiques qui s'écrasent mutuellement.
Par exemple, cette configuration test tenterait de créer deux séries de jobs identiques, mais les versions OS2 écraseraient les versions OS :
test:
parallel:
matrix:
- OS: [ubuntu]
PROVIDER: [aws, gcp]
- OS2: [ubuntu]
PROVIDER: [aws, gcp]
Sujets connexes :
needs:parallel:matrix.release {#release}Utilisez release pour créer une release.
Le job de release doit avoir accès à la CLI glab, qui doit se trouver dans le $PATH.
Si vous utilisez l'exécuteur Docker, vous pouvez utiliser cette image depuis le registre de conteneurs GitLab : registry.gitlab.com/gitlab-org/cli:latest
Si vous utilisez l'exécuteur Shell ou similaire, installez la CLI glab sur le serveur où le runner est enregistré.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge : Les sous-clés de release :
tag_nametag_message (optionnel)name (optionnel)descriptionref (optionnel)milestones (optionnel)released_at (optionnel)assets:links (optionnel)Exemple de mot-clé release :
release_job:
stage: release
image: registry.gitlab.com/gitlab-org/cli:latest
rules:
- if: $CI_COMMIT_TAG # Run this job when a tag is created manually
script:
- echo "Running the release job."
release:
tag_name: $CI_COMMIT_TAG
name: 'Release $CI_COMMIT_TAG'
description: 'Release created using the CLI.'
Cet exemple crée une release :
Informations complémentaires :
Les jobs de release doivent inclure le mot-clé script. Un job de release peut utiliser la sortie des commandes de script. Si vous n'avez pas besoin du script, vous pouvez utiliser un espace réservé :
script:
- echo "release job"
Pour plus de détails, consultez l'issue 223856, qui vise à supprimer cette restriction.
La section release s'exécute après le mot-clé script et avant le after_script.
Une release n'est créée que si le script principal du job réussit.
Si la release existe déjà, elle n'est pas mise à jour et le job avec le mot-clé release échoue.
Sujets connexes :
release.release:tag_name {#releasetag_name}Obligatoire. Le tag Git pour la release.
Si le tag n'existe pas encore dans le projet, il est créé en même temps que la release. Les nouveaux tags utilisent le SHA associé au pipeline.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
Les variables CI/CD sont prises en charge.
Exemple de release:tag_name :
Pour créer une release lorsqu'un nouveau tag est ajouté au projet :
$CI_COMMIT_TAG comme tag_name.rules:if pour configurer le job afin qu'il s'exécute uniquement pour les nouveaux tags.job:
script: echo "Running the release job for the new tag."
release:
tag_name: $CI_COMMIT_TAG
description: 'Release description'
rules:
- if: $CI_COMMIT_TAG
Pour créer une release et un nouveau tag simultanément, vos rules ne doivent pas configurer le job pour qu'il s'exécute uniquement pour les nouveaux tags. Un exemple de gestion sémantique de version :
job:
script: echo "Running the release job and creating a new tag."
release:
tag_name: ${MAJOR}_${MINOR}_${REVISION}
description: 'Release description'
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"
release:tag_message {#releasetag_message}Si le tag n'existe pas, le tag nouvellement créé est annoté avec le message spécifié par tag_message. Si omis, un tag léger est créé.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
Exemple de release:tag_message :
release_job:
stage: release
release:
tag_name: $CI_COMMIT_TAG
description: 'Release description'
tag_message: 'Annotated tag message'
release:name {#releasename}Le nom de la release. Si omis, il est renseigné avec la valeur de release: tag_name.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
Exemple de release:name :
release_job:
stage: release
release:
name: 'Release $CI_COMMIT_TAG'
release:description {#releasedescription}La description longue de la release.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
$CI_PROJECT_DIR).$CI_PROJECT_DIR../path/to/file et le nom du fichier ne peuvent pas contenir d'espaces.Exemple de release:description :
job:
release:
tag_name: ${MAJOR}_${MINOR}_${REVISION}
description: './path/to/CHANGELOG.md'
Informations complémentaires :
description est évaluée par le shell qui exécute glab. Vous pouvez utiliser des variables CI/CD pour définir la description, mais certains shells utilisent une syntaxe différente pour référencer les variables. De même, certains shells peuvent nécessiter l'échappement de caractères spéciaux. Par exemple, les apostrophes inversées (`) peuvent nécessiter d'être échappées avec une barre oblique inverse (\).release:ref {#releaseref}La ref pour la release, si le release: tag_name n'existe pas encore.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
release:milestones {#releasemilestones}Le titre de chaque jalon auquel la release est associée.
release:released_at {#releasereleased_at}La date et l'heure auxquelles la release est prête.
Valeurs prises en charge :
Exemple de release:released_at :
released_at: '2021-03-15T08:00:00Z'
Informations complémentaires :
release:assets:links {#releaseassetslinks}Utilisez release:assets:links pour inclure des liens vers des ressources dans la release.
Exemple de release:assets:links :
assets:
links:
- name: 'asset1'
url: 'https://example.com/assets/1'
- name: 'asset2'
url: 'https://example.com/assets/2'
filepath: '/pretty/url/1' # optional
link_type: 'other' # optional
resource_group {#resource_group}Utilisez resource_group pour créer un groupe de ressources qui garantit qu'un job est mutuellement exclusif entre différents pipelines pour le même projet.
Par exemple, si plusieurs jobs appartenant au même groupe de ressources sont mis en file d'attente simultanément, un seul des jobs démarre. Les autres jobs attendent que le resource_group soit libre.
Les groupes de ressources se comportent de manière similaire aux sémaphores dans d'autres langages de programmation.
Vous pouvez choisir un mode de traitement pour contrôler stratégiquement la simultanéité des jobs selon vos préférences de déploiement. Le mode de traitement par défaut est unordered. Pour modifier le mode de traitement d'un groupe de ressources, utilisez l'API pour envoyer une requête afin de modifier un groupe de ressources existant.
Vous pouvez définir plusieurs groupes de ressources par environnement. Par exemple, lors du déploiement sur des appareils physiques, vous pouvez avoir plusieurs appareils physiques. Chaque appareil peut recevoir un déploiement, mais un seul déploiement peut avoir lieu par appareil à un moment donné.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
-, _, /, $, {, }, . et des espaces. Ne peut pas commencer ou se terminer par /. Les variables CI/CD sont prises en charge.Exemple de resource_group :
deploy-to-production:
script: deploy
resource_group: production
Dans cet exemple, deux deploy-to-production jobs dans deux pipelines distincts ne peuvent jamais s'exécuter en même temps. Ainsi, vous pouvez garantir qu'aucun déploiement simultané ne se produira dans l'environnement de production.
Sujets connexes :
retry {#retry}Utilisez retry pour configurer le nombre de nouvelles tentatives d'un job en cas d'échec. Si non défini, la valeur par défaut est 0 et les jobs ne font pas l'objet de nouvelles tentatives.
En cas d'échec d'un job, celui-ci est traité jusqu'à deux fois supplémentaires, jusqu'à ce qu'il réussisse ou atteigne le nombre maximum de tentatives.
Par défaut, tous les types d'échec entraînent une nouvelle tentative pour le job. Utilisez retry:when ou retry:exit_codes pour sélectionner les types d'échec sur lesquels effectuer de nouvelles tentatives.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge :
0 (par défaut), 1 ou 2.Exemple de retry :
test:
script: rspec
retry: 2
test_advanced:
script:
- echo "Run a script that results in exit code 137."
- exit 137
retry:
max: 2
when: runner_system_failure
exit_codes: 137
test_advanced fera l'objet de jusqu'à 2 nouvelles tentatives si le code de sortie est 137 ou en cas d'échec système du runner.
retry:when {#retrywhen}Utilisez retry:when avec retry:max pour effectuer de nouvelles tentatives pour les jobs uniquement dans des cas d'échec spécifiques. retry:max est le nombre maximum de tentatives, comme pour retry, et peut être 0, 1 ou 2.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge :
always : Réessayer en cas d'échec quelconque (par défaut).unknown_failure : Réessayer lorsque la raison de l'échec est inconnue.script_failure : Réessayer lorsque :
docker, docker+machine, kubernetes.api_failure : Réessayer en cas d'échec de l'API.stuck_or_timeout_failure : Réessayer lorsque le job est bloqué ou a expiré.runner_system_failure : Réessayer en cas d'échec système du runner (par exemple, si la configuration du job a échoué).runner_unsupported : Réessayer si le runner n'est pas pris en charge.stale_schedule : Réessayer si un job différé n'a pas pu être exécuté.job_execution_timeout : Réessayer si le script a dépassé la durée maximale d'exécution définie pour le job.archived_failure : Réessayer si le job est archivé et ne peut pas être exécuté.unmet_prerequisites : Réessayer si le job n'a pas réussi à terminer les tâches prérequises.scheduler_failure : Réessayer si le planificateur n'a pas réussi à attribuer le job à un runner.data_integrity_failure : Réessayer en cas de problème inconnu avec le job.Exemple de retry:when (type d'échec unique) :
test:
script: rspec
retry:
max: 2
when: runner_system_failure
En cas d'échec autre qu'un échec système du runner, le job ne fait pas l'objet d'une nouvelle tentative.
Exemple de retry:when (tableau de types d'échec) :
test:
script: rspec
retry:
max: 2
when:
- runner_system_failure
- stuck_or_timeout_failure
retry:exit_codes {#retryexit_codes}{{< history >}}
ci_retry_on_exit_codes. Désactivé par défaut.ci_retry_on_exit_codes a été supprimé.{{< /history >}}
Utilisez retry:exit_codes avec retry:max pour effectuer de nouvelles tentatives pour les jobs uniquement dans des cas d'échec spécifiques. retry:max est le nombre maximum de tentatives, comme pour retry, et peut être 0, 1 ou 2.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge :
Exemple de retry:exit_codes :
test_job_1:
script:
- echo "Run a script that results in exit code 1. This job isn't retried."
- exit 1
retry:
max: 2
exit_codes: 137
test_job_2:
script:
- echo "Run a script that results in exit code 137. This job will be retried."
- exit 137
retry:
max: 1
exit_codes:
- 255
- 137
Sujets connexes :
Vous pouvez spécifier le nombre de tentatives pour certaines étapes de l'exécution du job à l'aide de variables.
rules {#rules}Utilisez rules pour inclure ou exclure des jobs dans les pipelines.
Les règles sont évaluées lors de la création du pipeline et évaluées dans l'ordre. Lorsqu'une correspondance est trouvée, aucune autre règle n'est vérifiée et le job est soit inclus, soit exclu du pipeline en fonction de la configuration. Si aucune règle ne correspond, le job n'est pas ajouté au pipeline.
rules accepte un tableau de règles. Chaque règle doit comporter au moins l'un des éléments suivants :
ifchangesexistswhenLes règles peuvent également être combinées en option avec :
allow_failureneedsvariablesinterruptibleVous pouvez combiner plusieurs mots-clés pour des règles complexes.
Le job est ajouté au pipeline :
if, changes ou exists correspond et est configurée avec when: on_success (par défaut si non défini), when: delayed ou when: always.when: on_success, when: delayed ou when: always.Le job n'est pas ajouté au pipeline :
when: never.Pour des exemples supplémentaires, consultez Spécifier quand les jobs s'exécutent avec rules.
rules:if {#rulesif}Utilisez des clauses rules:if pour spécifier quand ajouter un job à un pipeline :
if est vraie, ajoutez le job au pipeline.if est vraie, mais qu'elle est combinée avec when: never, n'ajoutez pas le job au pipeline.if est fausse, vérifiez l'élément rules suivant (s'il en existe d'autres).Les clauses if sont évaluées :
rules.Type de mot-clé : Spécifique au job et au pipeline. Vous pouvez l'utiliser dans un job pour configurer le comportement du job, ou avec workflow pour configurer le comportement du pipeline.
Valeurs prises en charge :
Exemple de rules:if :
job:
script: echo "Hello, Rules!"
rules:
- if: $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME =~ /^feature/ && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME != $CI_DEFAULT_BRANCH
when: never
- if: $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME =~ /^feature/
when: manual
allow_failure: true
- if: $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME
Informations complémentaires :
if. Consultez l'issue 327780 pour plus de détails.when défini, la règle utilise le when défini pour le job, dont la valeur par défaut est on_success si non défini.when au niveau du job avec when dans les règles. La configuration when dans rules a la priorité sur when au niveau du job.script, les variables dans les expressions de règles sont toujours formatées en tant que $VARIABLE.
rules:if avec include pour inclure d'autres fichiers de configuration de manière conditionnelle.=~ et !~ sont évaluées comme des expressions régulières.Sujets connexes :
if courantes pour rules.rules pour exécuter des pipelines de merge request.rules:changes {#ruleschanges}Utilisez rules:changes pour spécifier quand ajouter un job à un pipeline en vérifiant les modifications apportées à des fichiers spécifiques.
Pour les nouveaux pipelines de branche ou lorsqu'il n'y a pas d'événement Git push, rules: changes s'évalue toujours à true et le job s'exécute toujours. Les pipelines tels que les pipelines de tags, les pipelines planifiés et les pipelines manuels n'ont pas d'événement Git push associé. Pour couvrir ces cas, utilisez rules: changes: compare_to pour spécifier la branche à comparer à la référence du pipeline.
Si vous n'utilisez pas compare_to, vous devriez utiliser rules: changes uniquement avec des pipelines de branche ou des pipelines de merge request, même si rules: changes s'évalue toujours à true lors de la création d'une nouvelle branche. Avec :
rules:changes compare les modifications avec la branche MR cible.rules:changes compare les modifications avec le commit précédent sur la branche.Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
Un tableau comprenant un nombre quelconque de :
path/to/directory/*.path/to/directory/**/*.*.md ou path/to/directory/*.{rb,py,sh}."*.json" ou "**/*.json".Exemple de rules:changes :
docker build:
script: docker build -t my-image:$CI_COMMIT_REF_SLUG .
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
changes:
- Dockerfile
when: manual
allow_failure: true
docker build alternative:
variables:
DOCKERFILES_DIR: 'path/to/dockerfiles'
script: docker build -t my-image:$CI_COMMIT_REF_SLUG .
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
changes:
- $DOCKERFILES_DIR/**/*
Dans cet exemple :
Dockerfile et aux fichiers dans $DOCKERFILES_DIR/**/*.Dockerfile a été modifié, ajouter le job au pipeline en tant que job manuel, et le pipeline continue de s'exécuter même si le job n'est pas déclenché (allow_failure: true).$DOCKERFILES_DIR/**/* a été modifié, ajouter le job au pipeline.when: never).Informations complémentaires :
File.fnmatch avec les indicateurs File::FNM_PATHNAME | File::FNM_DOTMATCH | File::FNM_EXTGLOB.changes ou aux chemins de fichiers. Au-delà de la 50 000e vérification, les règles avec des patterns glob correspondent toujours. En d'autres termes, la règle changes suppose toujours une correspondance lorsque plus de 50 000 fichiers ont été modifiés, ou si moins de 50 000 fichiers ont été modifiés mais que les règles changes sont vérifiées plus de 50 000 fois.rules:changes.changes est évalué à true si l'un des fichiers correspondants est modifié (opération OR).rules.$ pour les variables et les chemins. Par exemple, si la variable $VAR existe, sa valeur est utilisée. Si elle n'existe pas, le $ est interprété comme faisant partie d'un chemin../, les doubles barres obliques (//) ni aucun autre type de chemin relatif. Les chemins sont comparés par correspondance exacte de chaîne ; ils ne sont pas évalués comme dans un shell.Sujets connexes :
rules:changes:paths {#ruleschangespaths}{{< history >}}
{{< /history >}}
Utilisez rules:changes pour spécifier qu'un job ne soit ajouté à un pipeline que lorsque des fichiers spécifiques sont modifiés, et utilisez rules:changes:paths pour spécifier les fichiers.
rules:changes:paths est identique à l'utilisation de rules:changes sans sous-clés. Tous les détails supplémentaires et les sujets connexes sont identiques.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
rules:changes.Exemple de rules:changes:paths :
docker-build-1:
script: docker build -t my-image:$CI_COMMIT_REF_SLUG .
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
changes:
- Dockerfile
docker-build-2:
script: docker build -t my-image:$CI_COMMIT_REF_SLUG .
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
changes:
paths:
- Dockerfile
Dans cet exemple, les deux jobs ont le même comportement.
rules:changes:compare_to {#ruleschangescompare_to}{{< history >}}
ci_rules_changes_compare. Activé par défaut.ci_rules_changes_compare a été supprimé.{{< /history >}}
Utilisez rules:changes:compare_to pour spécifier la référence à comparer pour les modifications apportées aux fichiers répertoriés sous rules:changes:paths.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans le cadre d'un job et il doit être combiné avec rules:changes:paths.
Valeurs prises en charge :
main, branch1 ou refs/heads/branch1.tag1 ou refs/tags/tag1.2fg31ga14b.Les variables CI/CD sont prises en charge.
Exemple de rules:changes:compare_to :
docker build:
script: docker build -t my-image:$CI_COMMIT_REF_SLUG .
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
changes:
paths:
- Dockerfile
compare_to: 'refs/heads/branch1'
Dans cet exemple, le docker build job n'est inclus que lorsque le Dockerfile a été modifié par rapport à refs/heads/branch1 et que la source du pipeline est un événement de merge request.
Informations complémentaires :
compare_to dans certaines situations peut produire des résultats inattendus :
Sujets connexes :
rules:changes:compare_to pour ignorer un job si la branche est vide.rules:exists {#rulesexists}{{< history >}}
exists est passé de 10 000 à 50 000 dans GitLab 17.7.{{< /history >}}
Utilisez exists pour exécuter un job lorsque certains fichiers ou répertoires existent dans le dépôt.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser dans le cadre d'un job ou d'un include.
Valeurs prises en charge :
$CI_PROJECT_DIR) et ne peuvent pas pointer directement en dehors de celui-ci. Les chemins de fichiers peuvent utiliser des patterns glob et des variables CI/CD.Exemple de rules:exists :
job1:
script: docker build -t my-image:$CI_COMMIT_REF_SLUG .
rules:
- exists:
- Dockerfile
job2:
variables:
DOCKERPATH: "**/Dockerfile"
script: docker build -t my-image:$CI_COMMIT_REF_SLUG .
rules:
- exists:
- $DOCKERPATH
Dans cet exemple :
job1 s'exécute si un Dockerfile existe dans le répertoire racine du dépôt.job2 s'exécute si un Dockerfile existe n'importe où dans le dépôt.Informations complémentaires :
File.fnmatch avec les indicateurs File::FNM_PATHNAME | File::FNM_DOTMATCH | File::FNM_EXTGLOB.exists ou aux chemins de fichiers. Au-delà de la 50 000e vérification, les règles avec des patterns glob correspondent toujours. En d'autres termes, la règle exists suppose toujours une correspondance dans les projets comportant plus de 50 000 fichiers, ou s'il y a moins de 50 000 fichiers mais que les règles exists sont vérifiées plus de 50 000 fois.
rules:exists.exists prend la valeur true si l'un des fichiers listés est trouvé (opération OR).rules:exists au niveau du job, GitLab recherche les fichiers dans le projet et la référence qui exécute le pipeline. Lors de l'utilisation de include avec rules:exists, GitLab recherche les fichiers ou répertoires dans le projet et la référence du fichier qui contient la section include. Le projet contenant la section include peut être différent du projet qui exécute le pipeline lors de l'utilisation de :
rules:exists ne peut pas rechercher la présence d'artefacts, car l'évaluation de rules s'effectue avant l'exécution des jobs et la récupération des artefacts.rules:exists:paths {#rulesexistspaths}{{< history >}}
ci_support_rules_exists_paths_and_project. Désactivé par défaut.ci_support_rules_exists_paths_and_project a été supprimé.{{< /history >}}
rules:exists:paths est identique à l'utilisation de rules:exists sans sous-clés. Toutes les informations complémentaires sont identiques.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser dans le cadre d'un job ou d'un include.
Valeurs prises en charge :
Exemple de rules:exists:paths :
docker-build-1:
script: docker build -t my-image:$CI_COMMIT_REF_SLUG .
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
exists:
- Dockerfile
docker-build-2:
script: docker build -t my-image:$CI_COMMIT_REF_SLUG .
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
exists:
paths:
- Dockerfile
Dans cet exemple, les deux jobs ont le même comportement.
rules:exists:project {#rulesexistsproject}{{< history >}}
ci_support_rules_exists_paths_and_project. Désactivé par défaut.ci_support_rules_exists_paths_and_project a été supprimé.{{< /history >}}
Utilisez rules:exists:project pour spécifier l'emplacement dans lequel rechercher les fichiers listés sous rules:exists:paths. Doit être utilisé avec rules:exists:paths.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser dans le cadre d'un job ou d'un include, et doit être combiné avec rules:exists:paths.
Valeurs prises en charge :
exists:project : Un chemin de projet complet, incluant l'espace de nommage et le groupe.exists:ref : Facultatif. La référence du commit à utiliser pour rechercher le fichier. La référence peut être un tag, un nom de branche ou un SHA. Par défaut, la valeur est HEAD du projet lorsqu'elle n'est pas spécifiée.Exemple de rules:exists:project :
docker build:
script: docker build -t my-image:$CI_COMMIT_REF_SLUG .
rules:
- exists:
paths:
- Dockerfile
project: my-group/my-project
ref: v1.0.0
Dans cet exemple, le job docker build n'est inclus que lorsque le Dockerfile existe dans le projet my-group/my-project sur le commit tagué avec v1.0.0.
rules:when {#ruleswhen}Utilisez rules:when seul ou dans le cadre d'une autre règle pour contrôler les conditions d'ajout d'un job à un pipeline. rules:when est similaire à when, mais avec des options d'entrée légèrement différentes.
Si une règle rules:when n'est pas combinée avec if, changes ou exists, elle correspond toujours si elle est atteinte lors de l'évaluation des règles d'un job.
Type de mot-clé : Spécifique au job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
on_success (par défaut) : Exécuter le job uniquement lorsqu'aucun job des étapes précédentes n'échoue.on_failure : Exécuter le job uniquement lorsqu'au moins un job d'une étape précédente échoue.never : Ne pas exécuter le job quel que soit le statut des jobs des étapes précédentes.always : Exécuter le job quel que soit le statut des jobs des étapes précédentes.manual : Ajouter le job au pipeline en tant que job manuel. La valeur par défaut de allow_failure est remplacée par false.delayed : Ajouter le job au pipeline en tant que job différé.Exemple de rules:when :
job1:
rules:
- if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
- if: $CI_COMMIT_REF_NAME =~ /feature/
when: delayed
- when: manual
script:
- echo
Dans cet exemple, job1 est ajouté aux pipelines :
when: on_success, qui est le comportement par défaut lorsque when n'est pas défini.Informations complémentaires :
on_success et on_failure :
allow_failure: true dans les étapes précédentes sont considérés comme réussis, même s'ils ont échoué.rules:when: manual pour ajouter un job manuel :
allow_failure prend la valeur false par défaut. Cette valeur par défaut est l'opposé de l'utilisation de when: manual pour ajouter un job manuel.when: manual défini en dehors de rules, définissez rules: allow_failure sur true.rules:allow_failure {#rulesallow_failure}Utilisez allow_failure: true dans rules pour permettre à un job d'échouer sans arrêter le pipeline.
Vous pouvez également utiliser allow_failure: true avec un job manuel. Le pipeline continue de s'exécuter sans attendre le résultat du job manuel. allow_failure: false combiné avec when: manual dans les règles oblige le pipeline à attendre que le job manuel s'exécute avant de continuer.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
true ou false. Par défaut, false si non défini.Exemple de rules:allow_failure :
job:
script: echo "Hello, Rules!"
rules:
- if: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH
when: manual
allow_failure: true
Si la règle correspond, le job est un job manuel avec allow_failure: true.
Informations complémentaires :
rules:allow_failure au niveau de la règle remplace le allow_failure au niveau du job et s'applique uniquement lorsque la règle spécifique déclenche le job.rules:needs {#rulesneeds}{{< history >}}
introduce_rules_with_needs. Désactivé par défaut.introduce_rules_with_needs a été supprimé.{{< /history >}}
Utilisez needs dans les règles pour mettre à jour la configuration needs d'un job pour des conditions spécifiques. Lorsqu'une condition correspond à une règle, la configuration needs du job est entièrement remplacée par le needs de la règle.
Type de mot-clé : Spécifique au job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
[]), pour définir les dépendances du job sur aucune lorsque la condition spécifique est remplie.Exemple de rules:needs :
build-dev:
stage: build
rules:
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH
script: echo "Feature branch, so building dev version..."
build-prod:
stage: build
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
script: echo "Default branch, so building prod version..."
tests:
stage: test
rules:
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH
needs: ['build-dev']
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
needs: ['build-prod']
script: echo "Running dev specs by default, or prod specs when default branch..."
Dans cet exemple :
specs dépend du job build-dev.specs dépend du job build-prod.Informations complémentaires :
needs dans les règles remplace tout needs défini au niveau du job. Lorsqu'il est remplacé, le comportement est identique à celui de needs au niveau du job.needs dans les règles peut accepter artifacts et optional.rules:variables {#rulesvariables}Utilisez variables dans rules pour définir des variables pour des conditions spécifiques.
Type de mot-clé : Spécifique au job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
VARIABLE-NAME: value.Exemple de rules:variables :
job:
variables:
DEPLOY_VARIABLE: "default-deploy"
rules:
- if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
variables: # Override DEPLOY_VARIABLE defined
DEPLOY_VARIABLE: "deploy-production" # at the job level.
- if: $CI_COMMIT_REF_NAME =~ /feature/
variables:
IS_A_FEATURE: "true" # Define a new variable.
script:
- echo "Run script with $DEPLOY_VARIABLE as an argument"
- echo "Run another script if $IS_A_FEATURE exists"
rules:interruptible {#rulesinterruptible}{{< history >}}
{{< /history >}}
Utilisez interruptible dans les règles pour mettre à jour la valeur interruptible d'un job pour des conditions spécifiques.
Type de mot-clé : Spécifique au job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
true ou false.Exemple de rules:interruptible :
job:
script: echo "Hello, Rules!"
interruptible: true
rules:
- if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
interruptible: false # Override interruptible defined at the job level.
- when: on_success
Informations complémentaires :
rules:interruptible au niveau de la règle remplace le interruptible au niveau du job et s'applique uniquement lorsque la règle spécifique déclenche le job.run {#run}{{< details >}}
{{< /details >}}
{{< history >}}
pipeline_run_keyword. Désactivé par défaut. Requiert GitLab Runner 17.1.pipeline_run_keyword a été supprimé dans GitLab 17.5.{{< /history >}}
[!note] Cette fonctionnalité est disponible pour les tests, mais n'est pas prête pour une utilisation en production.
Utilisez run pour définir une série d'étapes à exécuter dans un job. Chaque étape peut être un script ou une étape prédéfinie.
Vous pouvez également fournir des variables d'environnement et des entrées optionnelles.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
name : Une chaîne représentant le nom de l'étape.script : Une chaîne contenant les commandes shell à exécuter.step : Une chaîne identifiant une étape prédéfinie à exécuter.env : Facultatif. Un hash de variables d'environnement spécifiques à cette étape.inputs : Facultatif. Un hash de paramètres d'entrée pour les étapes prédéfinies.Chaque entrée du tableau doit avoir un name, et un script ou step (mais pas les deux).
Exemple de run :
job:
run:
- name: 'hello_steps'
script: 'echo "hello from step1"'
- name: 'bye_steps'
step: gitlab.com/gitlab-org/ci-cd/runner-tools/echo-step@main
inputs:
echo: 'bye steps!'
env:
var1: 'value 1'
Dans cet exemple, le job comporte deux étapes :
hello_steps exécute la commande shell echo.bye_steps utilise une étape prédéfinie avec une variable d'environnement et un paramètre d'entrée.Informations complémentaires :
script, soit une clé step, mais pas les deux.run ne peut pas être utilisée conjointement avec les mots-clés existants script, after_script ou before_script.script {#script}Utilisez script pour spécifier les commandes à exécuter par le runner.
Tous les jobs, à l'exception des jobs de déclenchement, nécessitent un mot-clé script.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge : Un tableau comprenant :
Les variables CI/CD sont prises en charge.
Exemple de script :
job1:
script: "bundle exec rspec"
job2:
script:
- uname -a
- bundle exec rspec
Informations complémentaires :
script, vous devez utiliser des guillemets simples (') ou des guillemets doubles (").Sujets connexes :
script pour faciliter la révision des job logs.secrets {#secrets}{{< details >}}
{{< /details >}}
Utilisez secrets pour spécifier des secrets CI/CD à :
file par défaut).secrets:vault {#secretsvault}{{< history >}}
generic a été introduite dans GitLab Runner 16.11.{{< /history >}}
Utilisez secrets:vault pour spécifier les secrets fournis par un HashiCorp Vault.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
engine:name : Nom du moteur de secrets. Peut être kv-v2 (par défaut), kv-v1 ou generic.engine:path : Chemin vers le moteur de secrets.path : Chemin vers le secret.field : Nom du champ où le mot de passe est stocké.Exemple de secrets:vault :
Pour spécifier tous les détails explicitement et utiliser le moteur de secrets KV-V2 :
job:
secrets:
DATABASE_PASSWORD: # Store the path to the secret in this CI/CD variable
vault: # Translates to secret: `ops/data/production/db`, field: `password`
engine:
name: kv-v2
path: ops
path: production/db
field: password
Vous pouvez raccourcir cette syntaxe. Avec la syntaxe courte, engine:name et engine:path ont tous deux pour valeur par défaut kv-v2 :
job:
secrets:
DATABASE_PASSWORD: # Store the path to the secret in this CI/CD variable
vault: production/db/password # Translates to secret: `kv-v2/data/production/db`, field: `password`
Pour spécifier un chemin de moteur de secrets personnalisé dans la syntaxe courte, ajoutez un suffixe commençant par @ :
job:
secrets:
DATABASE_PASSWORD: # Store the path to the secret in this CI/CD variable
vault: production/db/password@ops # Translates to secret: `ops/data/production/db`, field: `password`
secrets:gcp_secret_manager {#secretsgcp_secret_manager}{{< history >}}
{{< /history >}}
Utilisez secrets:gcp_secret_manager pour spécifier les secrets fournis par GCP Secret Manager.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
name : Nom du secret.version : Version du secret.Exemple de secrets:gcp_secret_manager :
job:
secrets:
DATABASE_PASSWORD:
gcp_secret_manager:
name: 'test'
version: 2
Sujets connexes :
secrets:azure_key_vault {#secretsazure_key_vault}{{< history >}}
{{< /history >}}
Utilisez secrets:azure_key_vault pour spécifier les secrets fournis par un Azure Key Vault.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
name : Nom du secret.version : Version du secret.Exemple de secrets:azure_key_vault :
job:
secrets:
DATABASE_PASSWORD:
azure_key_vault:
name: 'test'
version: 'test'
Sujets connexes :
secrets:file {#secretsfile}Utilisez secrets:file pour configurer le secret afin qu'il soit stocké en tant que variable CI/CD de type file ou variable
Par défaut, le secret est transmis au job en tant que variable CI/CD de type file. La valeur du secret est stockée dans le fichier et la variable contient le chemin vers le fichier.
Si votre logiciel ne peut pas utiliser les variables CI/CD de type file, définissez file: false pour stocker la valeur du secret directement dans la variable.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
true (par défaut) ou false.Exemple de secrets:file :
job:
secrets:
DATABASE_PASSWORD:
vault: production/db/password@ops
file: false
Informations complémentaires :
file est un paramètre pour la variable CI/CD et doit être imbriqué sous le nom de la variable CI/CD, et non dans la section vault.secrets:token {#secretstoken}{{< history >}}
{{< /history >}}
Utilisez secrets:token pour sélectionner explicitement un jeton à utiliser lors de l'authentification auprès du fournisseur de secrets externe en référençant la variable CI/CD du jeton.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
Exemple de secrets:token :
job:
id_tokens:
AWS_TOKEN:
aud: https://aws.example.com
VAULT_TOKEN:
aud: https://vault.example.com
secrets:
DB_PASSWORD:
vault: gitlab/production/db
token: $VAULT_TOKEN
Informations complémentaires :
token n'est pas défini et qu'un seul jeton est défini, le jeton défini est automatiquement utilisé.token. Si vous ne spécifiez pas quel jeton utiliser, il n'est pas possible de prédire quel jeton sera utilisé à chaque exécution du job.services {#services}Utilisez services pour spécifier les images Docker supplémentaires requises par vos scripts pour s'exécuter correctement. L'image services est liée à l'image spécifiée dans le mot-clé image.
La configuration du job et la configuration par défaut ne sont pas fusionnées. Si le pipeline a default:services défini, et que le job a également services, la configuration du job est prioritaire et la configuration par défaut n'est pas utilisée.
[!warning] Pour activer la mise en réseau inter-services, définissez
FF_NETWORK_PER_BUILDsurtrue. Sans cet indicateur, les services peuvent ne pas fonctionner correctement. Pour plus d'informations, voir les feature flags
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge : Le nom de l'image de services, incluant le chemin du registre si nécessaire, dans l'un des formats suivants :
<image-name> (identique à l'utilisation de <image-name> avec le tag latest)<image-name>:<tag><image-name>@<digest>Les variables CI/CD sont prises en charge, mais pas pour alias. Pour personnaliser alias dynamiquement, utilisez plutôt les entrées CI/CD.
Exemple de services :
default:
image:
name: ruby:2.6
entrypoint: ["/bin/bash"]
services:
- name: my-postgres:11.7
alias: db-postgres
entrypoint: ["/usr/local/bin/db-postgres"]
command: ["start"]
before_script:
- bundle install
test:
script:
- bundle exec rake spec
Dans cet exemple, GitLab lance deux conteneurs pour le job :
script.script dans le conteneur Ruby peuvent se connecter à la base de données PostgreSQL au nom d'hôte db-postgres.Informations complémentaires :
services au niveau supérieur, mais pas dans la section default, est dépréciée.Sujets connexes :
services.services dans le fichier .gitlab-ci.yml.services:name {#servicesname}Le nom complet de l'image à utiliser pour le service.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge : Le nom de l'image de service, incluant le chemin du registre si nécessaire, dans l'un des formats suivants :
<image-name> (identique à l'utilisation de <image-name> avec le tag latest)<image-name>:<tag><image-name>@<digest>Les variables CI/CD sont prises en charge.
Exemple de services:name :
services:
- name: postgres:11.7
- name: registry.example.com/my-org/custom-service:latest
Informations complémentaires :
alias pour définir des alias de nom uniques lors de l'utilisation de plusieurs images de service identiques, ou lorsque le nom de l'image de service est long.entrypoint, command ou variables, le mot-clé name est obligatoire.services:alias {#servicesalias}{{< history >}}
{{< /history >}}
Alias supplémentaires pour accéder au service depuis le conteneur du job.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge : Une chaîne avec un ou plusieurs alias séparés par des espaces ou des virgules.
Exemple de services:alias :
services:
- name: postgres:11.7
alias: db,postgres,pg
- name: mysql:latest
alias: mysql-1
Informations complémentaires :
services:docker {#servicesdocker}{{< history >}}
user a été introduite dans GitLab 16.8.{{< /history >}}
Utilisez services:docker pour transmettre des options à l'exécuteur Docker d'un GitLab Runner.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge :
Un hash d'options pour l'exécuteur Docker, qui peut inclure :
platform : Sélectionne l'architecture de l'image à télécharger. Lorsqu'elle n'est pas spécifiée, la valeur par défaut est la même plateforme que le runner hôte.user : Spécifiez le nom d'utilisateur ou l'UID à utiliser lors de l'exécution du conteneur.Exemple de services:docker :
arm-sql-job:
script: echo "Run sql tests in service container"
image: ruby:2.6
services:
- name: super/sql:experimental
docker:
platform: arm64/v8
user: dave
Informations complémentaires :
services:docker:platform correspond à l'option docker pull --platform.services:docker:user correspond à l'option docker run --user.services:kubernetes {#serviceskubernetes}{{< history >}}
user a été introduite dans GitLab Runner 17.11.user a été étendue pour prendre en charge le format uid:gid dans GitLab 18.0.{{< /history >}}
Utilisez services:kubernetes pour transmettre des options à l'exécuteur Kubernetes de GitLab Runner.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge :
Un hash d'options pour l'exécuteur Kubernetes, qui peut inclure :
user : Spécifiez le nom d'utilisateur ou l'UID à utiliser lors de l'exécution du conteneur. Vous pouvez également l'utiliser pour définir le GID en utilisant le format UID:GID.Exemple de services:kubernetes avec l'UID uniquement :
arm-sql-job:
script: echo "Run sql tests"
image: ruby:2.6
services:
- name: super/sql:experimental
kubernetes:
user: "1001"
Exemple de services:kubernetes avec l'UID et le GID :
arm-sql-job:
script: echo "Run sql tests"
image: ruby:2.6
services:
- name: super/sql:experimental
kubernetes:
user: "1001:1001"
services:entrypoint {#servicesentrypoint}Une commande ou un script à exécuter comme point d'entrée du conteneur.
Lors de la création du conteneur Docker, entrypoint est traduit en option Docker --entrypoint. La syntaxe est similaire à la directive ENTRYPOINT du Dockerfile, où chaque token shell est une chaîne séparée dans le tableau.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge : Un tableau de chaînes représentant la commande de point d'entrée.
Exemple de services:entrypoint :
services:
- name: my-postgres:11.7
entrypoint: ["/usr/local/bin/db-postgres"]
services:command {#servicescommand}Commande ou script à utiliser comme commande du conteneur.
Il est traduit en arguments passés à Docker après le nom de l'image. La syntaxe est similaire à la directive CMD du Dockerfile, où chaque token shell est une chaîne séparée dans le tableau.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge : Un tableau de chaînes représentant la commande.
Exemple de services:command :
services:
- name: super/sql:latest
command: ["/usr/bin/super-sql", "run"]
services:variables {#servicesvariables}Variables d'environnement supplémentaires transmises exclusivement au service. Les variables de service sont transmises exclusivement au conteneur de service et ne sont pas disponibles dans le conteneur du job.
La syntaxe est identique à celle des variables de job.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge : Un hash de noms et de valeurs de variables d'environnement.
Exemple de services:variables :
services:
- name: postgres:11.7
alias: db
variables:
POSTGRES_DB: "my_custom_db"
POSTGRES_USER: "postgres"
POSTGRES_PASSWORD: "example"
PGDATA: "/var/lib/postgresql/data"
Informations complémentaires :
services:pull_policy {#servicespull_policy}{{< history >}}
ci_docker_image_pull_policy. Désactivé par défaut.ci_docker_image_pull_policy supprimé.{{< /history >}}
La politique d'extraction que le runner utilise pour récupérer l'image Docker. Requiert GitLab Runner 15.1 ou une version ultérieure.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge :
always, if-not-present ou never.Exemples de services:pull_policy :
job1:
script: echo "A single pull policy."
services:
- name: postgres:11.6
pull_policy: if-not-present
job2:
script: echo "Multiple pull policies."
services:
- name: postgres:11.6
pull_policy: [always, if-not-present]
Informations complémentaires :
ERROR: Job failed (system failure): the configured PullPolicies ([always]) are not allowed by AllowedPullPolicies ([never]).Sujets connexes :
stage {#stage}Utilisez stage pour définir dans quelle étape un job s'exécute. Les jobs dans le même stage peuvent s'exécuter en parallèle (voir les Informations complémentaires).
Si stage n'est pas défini, le job utilise l'étape test par défaut.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge : Une chaîne, qui peut être :
Exemple de stage :
stages:
- build
- test
- deploy
job1:
stage: build
script:
- echo "This job compiles code."
job2:
stage: test
script:
- echo "This job tests the compiled code. It runs when the build stage completes."
job3:
script:
- echo "This job also runs in the test stage."
job4:
stage: deploy
script:
- echo "This job deploys the code. It runs when the test stage completes."
environment: production
Informations complémentaires :
concurrent du runner est supérieur à 1.stage: .pre {#stage-pre}Utilisez l'étape .pre pour faire s'exécuter un job au début d'un pipeline. Par défaut, .pre est la première étape d'un pipeline. Les étapes définies par l'utilisateur s'exécutent après .pre. Il n'est pas nécessaire de définir .pre dans stages.
Si un pipeline ne contient que des jobs dans les étapes .pre ou .post, il ne s'exécute pas. Il doit y avoir au moins un autre job dans une étape différente.
Type de mot-clé : Vous ne pouvez l'utiliser qu'avec le mot-clé stage d'un job.
Exemple de stage: .pre :
stages:
- build
- test
job1:
stage: build
script:
- echo "This job runs in the build stage."
first-job:
stage: .pre
script:
- echo "This job runs in the .pre stage, before all other stages."
job2:
stage: test
script:
- echo "This job runs in the test stage."
Informations complémentaires :
needs: [] et des jobs dans l'étape .pre, ils démarreront tous dès que le pipeline sera créé. Les jobs avec needs: [] démarrent immédiatement, ignorant toute configuration d'étape..pipeline-policy-pre qui s'exécute avant .pre.stage: .post {#stage-post}Utilisez l'étape .post pour faire s'exécuter un job à la fin d'un pipeline. Par défaut, .post est la dernière étape d'un pipeline. Les étapes définies par l'utilisateur s'exécutent avant .post. Il n'est pas nécessaire de définir .post dans stages.
Si un pipeline ne contient que des jobs dans les étapes .pre ou .post, il ne s'exécute pas. Il doit y avoir au moins un autre job dans une étape différente.
Type de mot-clé : Vous ne pouvez l'utiliser qu'avec le mot-clé stage d'un job.
Exemple de stage: .post :
stages:
- build
- test
job1:
stage: build
script:
- echo "This job runs in the build stage."
last-job:
stage: .post
script:
- echo "This job runs in the .post stage, after all other stages."
job2:
stage: test
script:
- echo "This job runs in the test stage."
Informations complémentaires :
.pipeline-policy-post qui s'exécute après .post.tags {#tags}Utilisez tags pour sélectionner un runner spécifique parmi la liste de tous les runners disponibles pour le projet.
Lorsque vous enregistrez un runner, vous pouvez spécifier les tags du runner, par exemple ruby, postgres ou development. Pour récupérer et exécuter un job, un runner doit disposer de chaque tag listé dans le job.
La configuration du job et la configuration par défaut ne sont pas fusionnées. Si le pipeline a default:tags défini, et que le job a également tags, la configuration du job est prioritaire et la configuration par défaut n'est pas utilisée.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job ou dans la section default.
Valeurs prises en charge :
Exemple de tags :
job:
tags:
- ruby
- postgres
Dans cet exemple, seuls les runners disposant à la fois des tags ruby et postgres peuvent exécuter le job.
Informations complémentaires :
50.Sujets connexes :
timeout {#timeout}Utilisez timeout pour configurer un délai d'expiration pour un job spécifique. Si le job s'exécute plus longtemps que le délai d'expiration, il échoue.
Le délai d'expiration au niveau du job peut être plus long que le délai d'expiration au niveau du projet, mais ne peut pas être plus long que le délai d'expiration du runner.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge : Une durée exprimée en langage naturel. Par exemple, ces valeurs sont toutes équivalentes :
3600 seconds60 minutesone hourExemple de timeout :
build:
script: build.sh
timeout: 3 hours 30 minutes
test:
script: rspec
timeout: 3h 30m
Informations complémentaires :
timeout n'est pas pris en charge dans la configuration default. Définissez plutôt timeout dans les configurations individuelles des jobs. Pour plus d'informations, voir le ticket 213634.trigger {#trigger}{{< history >}}
environment a été introduite dans GitLab 16.4.{{< /history >}}
Utilisez trigger pour déclarer qu'un job est un « job de déclenchement » qui lance un pipeline downstream qui est soit :
Les jobs de déclenchement ne peuvent utiliser qu'un ensemble limité de mots-clés de configuration GitLab CI/CD. Les mots-clés disponibles pour une utilisation dans les jobs de déclenchement sont :
allow_failure.extends.needs, mais pas needs:project.only et except.parallel.rules.stage.trigger.variables.when (uniquement avec une valeur de on_success, on_failure, always ou manual).resource_group.environment.Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
trigger:project.trigger:include.Exemple de trigger :
trigger-multi-project-pipeline:
trigger: my-group/my-project
Informations complémentaires :
when:manual dans le même job que trigger, mais vous ne pouvez pas utiliser l'API pour démarrer les jobs de déclenchement when:manual. Voir le ticket 284086 pour plus de détails.variables de niveau supérieur (globalement) ou dans le job de déclenchement sont transmises au pipeline downstream en tant que variables de déclenchement.trigger:forward pour transmettre ces variables aux pipelines downstream.config.toml du runner ne sont pas disponibles pour les jobs de déclenchement et ne sont pas transmises aux pipelines downstream.needs:pipeline:job dans un job de déclenchement.Sujets connexes :
trigger.trigger:inputs {#triggerinputs}{{< history >}}
{{< /history >}}
Utilisez trigger:inputs pour définir les entrées CI/CD d'un pipeline multi-projets lorsque la configuration du pipeline downstream utilise spec:inputs.
Exemple de trigger:inputs :
trigger:
- project: 'my-group/my-project'
inputs:
website: "My website"
trigger:include {#triggerinclude}Utilisez trigger:include pour déclarer qu'un job est un « job de déclenchement » qui lance un pipeline enfant.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
Exemple de trigger:include :
trigger-child-pipeline:
trigger:
include: path/to/child-pipeline.gitlab-ci.yml
Informations complémentaires :
Utilisez :
trigger:include:artifact pour déclencher un pipeline enfant dynamique.
trigger:include:inputs pour définir les entrées CI/CD lorsque la configuration du pipeline downstream utilise spec:inputs.
trigger:include:local pour un chemin vers un fichier de configuration de pipeline enfant lorsque :
Combinaison de plusieurs fichiers de configuration de pipeline enfant.
Combiné avec trigger:include:inputs pour transmettre des entrées au pipeline parent-enfant. Par exemple :
staging-job:
trigger:
include:
- local: path/to/child-pipeline.yml
inputs:
environment: staging
trigger:include:project pour déclencher un pipeline parent-enfant avec un fichier de configuration dans un autre projet. Si le fichier contient des entrées include supplémentaires, GitLab recherche les fichiers dans le projet exécutant le pipeline, et non dans le projet hébergeant le fichier.
trigger:include:template pour déclencher un pipeline parent-enfant avec un template CI/CD.
Sujets connexes :
trigger:include:inputs {#triggerincludeinputs}{{< history >}}
{{< /history >}}
Utilisez trigger:include:inputs pour définir les entrées d'un pipeline parent-enfant lorsque la configuration du pipeline downstream utilise spec:inputs.
Exemple de trigger:inputs :
trigger-job:
trigger:
include:
- local: path/to/child-pipeline.yml
inputs:
website: "My website"
trigger:project {#triggerproject}Utilisez trigger:project pour déclarer qu'un job est un « job déclencheur » qui démarre un pipeline multi-projets.
Par défaut, le pipeline multi-projets se déclenche pour la branche par défaut. Utilisez trigger:branch pour spécifier une autre branche.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
Exemple de trigger:project :
trigger-multi-project-pipeline:
trigger:
project: my-group/my-project
Exemple de trigger:project pour une autre branche :
trigger-multi-project-pipeline:
trigger:
project: my-group/my-project
branch: development
Sujets connexes :
trigger.trigger:strategy {#triggerstrategy}{{< history >}}
strategy:mirror introduite dans GitLab 18.2.{{< /history >}}
Utilisez trigger:strategy pour forcer le job trigger à attendre que le pipeline downstream se termine avant d'être marqué comme réussi.
Ce comportement est différent du comportement par défaut, selon lequel le job trigger est marqué comme réussi dès que le pipeline downstream est créé.
Ce paramètre rend l'exécution de votre pipeline linéaire plutôt que parallèle.
Valeurs prises en charge :
mirror : Reproduit exactement le statut du pipeline downstream.depend : Non recommandé, utilisez mirror à la place. Le statut du job déclencheur affiche en échec, réussi ou en cours, selon le statut du pipeline downstream. Consultez les informations complémentaires.Exemple de trigger:strategy :
trigger_job:
trigger:
include: path/to/child-pipeline.yml
strategy: mirror
Dans cet exemple, les jobs des étapes suivantes attendent que le pipeline déclenché se termine avec succès avant de démarrer.
Informations complémentaires :
strategy:depend (plus recommandé, utilisez strategy:mirror à la place) :
allow_failure: true, le pipeline downstream est considéré comme réussi et le job déclencheur affiche réussi.trigger:forward {#triggerforward}{{< history >}}
ci_trigger_forward_variables supprimé.{{< /history >}}
Utilisez trigger:forward pour spécifier ce qui doit être transmis au pipeline downstream. Vous pouvez contrôler ce qui est transmis aux pipelines parent-enfant et aux pipelines multi-projets.
Les variables transmises ne sont pas retransmises dans les pipelines downstream imbriqués par défaut, sauf si le job déclencheur downstream imbriqué utilise également trigger:forward.
Valeurs prises en charge :
yaml_variables : true (par défaut), ou false. Lorsque la valeur est true, les variables définies dans le job déclencheur sont transmises aux pipelines downstream.pipeline_variables : true ou false (par défaut). Lorsque la valeur est true, les variables de pipeline sont transmises au pipeline downstream.Exemple de trigger:forward :
Exécutez ce pipeline manuellement, avec la variable CI/CD MYVAR = my value :
variables: # default variables for each job
VAR: value
---
# Default behavior:
---
# - VAR is passed to the child
---
# - MYVAR is not passed to the child
child1:
trigger:
include: .child-pipeline.yml
---
# Forward pipeline variables:
---
# - VAR is passed to the child
---
# - MYVAR is passed to the child
child2:
trigger:
include: .child-pipeline.yml
forward:
pipeline_variables: true
---
# Do not forward YAML variables:
---
# - VAR is not passed to the child
---
# - MYVAR is not passed to the child
child3:
trigger:
include: .child-pipeline.yml
forward:
yaml_variables: false
Informations complémentaires :
trigger:forward sont des variables de pipeline, qui ont une priorité élevée. Si une variable portant le même nom est définie dans le pipeline downstream, cette variable est généralement écrasée par la variable transmise.when {#when}Utilisez when pour configurer les conditions dans lesquelles les jobs s'exécutent. Si non définie dans un job, la valeur par défaut est when: on_success.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser dans le cadre d'un job. when: always et when: never peuvent également être utilisés dans workflow:rules.
Valeurs prises en charge :
on_success (par défaut) : Exécuter le job uniquement lorsqu'aucun job des étapes précédentes n'échoue.on_failure : Exécuter le job uniquement lorsqu'au moins un job d'une étape précédente échoue.never : Ne pas exécuter le job quel que soit le statut des jobs des étapes précédentes. Peut être utilisé uniquement dans une section rules ou workflow: rules.always : Exécuter le job quel que soit le statut des jobs des étapes précédentes.manual : Ajouter le job au pipeline en tant que job manuel.delayed : Ajouter le job au pipeline en tant que job différé.Exemple de when :
stages:
- build
- cleanup_build
- test
- deploy
- cleanup
build_job:
stage: build
script:
- make build
cleanup_build_job:
stage: cleanup_build
script:
- cleanup build when failed
when: on_failure
test_job:
stage: test
script:
- make test
deploy_job:
stage: deploy
script:
- make deploy
when: manual
environment: production
cleanup_job:
stage: cleanup
script:
- cleanup after jobs
when: always
Dans cet exemple, le script :
cleanup_build_job uniquement lorsque build_job échoue.cleanup_job comme dernière étape du pipeline, quelle que soit la réussite ou l'échec.deploy_job lorsque vous le lancez manuellement dans l'interface GitLab.Informations complémentaires :
on_success et on_failure :
allow_failure: true dans les étapes précédentes sont considérés comme réussis, même s'ils ont échoué.allow_failure est true avec when: manual. La valeur par défaut passe à false avec rules:when: manual.Sujets connexes :
when peut être utilisé avec rules pour un contrôle des jobs plus dynamique.when peut être utilisé avec workflow pour contrôler quand un pipeline peut démarrer.manual_confirmation {#manual_confirmation}{{< history >}}
{{< /history >}}
Utilisez manual_confirmation avec when: manual pour définir un message de confirmation personnalisé pour les jobs manuels. Si aucun job manuel n'est défini avec when: manual, ce mot-clé est sans effet.
La confirmation manuelle fonctionne avec tous les jobs manuels, y compris les jobs d'arrêt d'environnement qui utilisent environment:action: stop.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Valeurs prises en charge :
Exemple de manual_confirmation :
delete_job:
stage: post-deployment
script:
- make delete
when: manual
manual_confirmation: 'Are you sure you want to delete this environment?'
stop_production:
stage: cleanup
script:
- echo "Stopping production environment"
environment:
name: production
action: stop
when: manual
manual_confirmation: "Are you sure you want to stop the production environment?"
start_in {#start_in}Utilisez start_in pour retarder l'exécution d'un job d'une durée spécifiée après la création du job. Vous devez configurer when: delayed pour le job.
Type de mot-clé : Mot-clé de job. Vous pouvez l'utiliser uniquement dans un job.
Possible inputs : Une durée en secondes, minutes ou heures. Doit être inférieur ou égal à une semaine. Exemples de valeurs valides :
'5' (5 secondes)'10 seconds''30 minutes''1 hour''1 day'Exemple de start_in :
deploy_production:
stage: deploy
script:
- echo "Deploying to production"
when: delayed
start_in: 30 minutes
Dans cet exemple, le job deploy_production démarre 30 minutes après la fin de l'étape précédente.
Informations complémentaires :
start_in fonctionne uniquement lorsque when est défini sur delayed. Si vous utilisez une autre valeur pour when, la configuration est invalide. Si un job utilise rules, start_in et when doivent être définis dans rules, et non au niveau du job. Sinon, vous recevez une erreur de validation : config key may not be used with 'rules': start_in.start_in n'est pas pris en charge avec workflow:rules, mais ne provoque aucune violation de syntaxe.Sujets connexes :
variables {#variables}Utilisez variables pour définir des variables CI/CD.
Les variables peuvent être définies dans un job CI/CD, ou en tant que mot-clé de niveau supérieur (global) pour définir des variables CI/CD par défaut pour tous les jobs.
Informations complémentaires :
trigger:forward pour transmettre ces variables aux pipelines downstream.Sujets connexes :
variables {#job-variables}Vous pouvez utiliser des variables de job dans les commandes des sections script, before_script ou after_script du job, ainsi qu'avec certains mots-clés de job. Consultez la section Valeurs prises en charge de chaque mot-clé de job pour vérifier s'il prend en charge les variables.
Vous ne pouvez pas utiliser les variables de job comme valeurs pour des mots-clés globaux tels que include.
Valeurs prises en charge : Paires nom-valeur de variables :
_). Dans certains shells, le premier caractère doit être une lettre.Les variables CI/CD sont prises en charge.
Exemple de variables de job :
review_job:
variables:
DEPLOY_SITE: "https://dev.example.com/"
REVIEW_PATH: "/review"
script:
- deploy-review-script --url $DEPLOY_SITE --path $REVIEW_PATH
Dans cet exemple :
review_job a les variables de job DEPLOY_SITE et REVIEW_PATH définies. Les deux variables de job peuvent être utilisées dans la section script.variables par défaut {#default-variables}Les variables définies dans une section variables de niveau supérieur servent de variables par défaut pour tous les jobs.
Chaque variable par défaut est mise à disposition de chaque job dans le pipeline, sauf lorsque le job possède déjà une variable définie avec le même nom. La variable définie dans le job est prioritaire, de sorte que la valeur de la variable par défaut portant le même nom ne peut pas être utilisée dans le job.
Comme pour les variables de job, vous ne pouvez pas utiliser les variables par défaut comme valeurs pour d'autres mots-clés globaux, tels que include.
Valeurs prises en charge : Paires nom-valeur de variables :
_). Dans certains shells, le premier caractère doit être une lettre.Les variables CI/CD sont prises en charge.
Exemples de variables :
variables:
DEPLOY_SITE: "https://example.com/"
deploy_job:
stage: deploy
script:
- deploy-script --url $DEPLOY_SITE --path "/"
environment: production
deploy_review_job:
stage: deploy
variables:
DEPLOY_SITE: "https://dev.example.com/"
REVIEW_PATH: "/review"
script:
- deploy-review-script --url $DEPLOY_SITE --path $REVIEW_PATH
environment: production
Dans cet exemple :
deploy_job n'a aucune variable définie. La variable DEPLOY_SITE par défaut est copiée dans le job et peut être utilisée dans la section script.deploy_review_job a déjà une variable DEPLOY_SITE définie, de sorte que la valeur par défaut DEPLOY_SITE n'est pas copiée dans le job. Le job a également une variable de job REVIEW_PATH définie. Les deux variables de job peuvent être utilisées dans la section script.variables:description {#variablesdescription}Utilisez le mot-clé description pour définir une description pour une variable par défaut. La description s'affiche avec le nom de la variable prérempli lors de l'exécution manuelle d'un pipeline.
Type de mot-clé : Vous ne pouvez utiliser ce mot-clé qu'avec les variables par défaut, et non avec les variables de job.
Valeurs prises en charge :
Exemple de variables:description :
variables:
DEPLOY_NOTE:
description: "The deployment note. Explain the reason for this deployment."
Informations complémentaires :
value, la variable existe dans les pipelines qui n'ont pas été déclenchés manuellement, et la valeur par défaut est une chaîne vide ('').variables:value {#variablesvalue}Utilisez le mot-clé value pour définir la valeur d'une variable de niveau pipeline (par défaut). Lorsqu'utilisé avec variables: description, la valeur de la variable est préremplie lors de l'exécution manuelle d'un pipeline.
Type de mot-clé : Vous ne pouvez utiliser ce mot-clé qu'avec les variables par défaut, et non avec les variables de job.
Valeurs prises en charge :
Exemple de variables:value :
variables:
DEPLOY_ENVIRONMENT:
value: "staging"
description: "The deployment target. Change this variable to 'canary' or 'production' if needed."
Informations complémentaires :
variables: description, le comportement est identique à celui de variables.variables:options {#variablesoptions}{{< history >}}
{{< /history >}}
Utilisez variables:options pour définir un tableau de valeurs sélectionnables dans l'interface lors de l'exécution manuelle d'un pipeline.
Doit être utilisé avec variables: value, et la chaîne définie pour value :
options.En l'absence de description, ce mot-clé est sans effet.
Type de mot-clé : Vous ne pouvez utiliser ce mot-clé qu'avec les variables par défaut, et non avec les variables de job.
Valeurs prises en charge :
Exemple de variables:options :
variables:
DEPLOY_ENVIRONMENT:
value: "staging"
options:
- "production"
- "staging"
- "canary"
description: "The deployment target. Set to 'staging' by default."
variables:expand {#variablesexpand}{{< history >}}
ci_raw_variables_in_yaml_config. Désactivé par défaut.ci_raw_variables_in_yaml_config a été supprimé.{{< /history >}}
Utilisez le mot-clé expand pour configurer une variable comme étant développable ou non.
Type de mot-clé : Vous pouvez utiliser ce mot-clé avec les variables par défaut et de job.
Valeurs prises en charge :
true (par défaut) : La variable est développable.false : La variable n'est pas développable.Exemple de variables:expand :
variables:
VAR1: value1
VAR2: value2 $VAR1
VAR3:
value: value3 $VAR1
expand: false
VAR2 est value2 value1.VAR3 est value3 $VAR1.Informations complémentaires :
expand ne peut être utilisé qu'avec les mots-clés variables par défaut et de job. Vous ne pouvez pas l'utiliser avec rules:variables ou workflow:rules:variables.