doc-locale/fr-fr/ci/variables/job_scripts.md
{{< details >}}
{{< /details >}}
Toutes les variables CI/CD sont définies en tant que variables d'environnement dans l'environnement du job. Vous pouvez utiliser des variables dans les scripts de job avec le formatage standard du shell de chaque environnement.
Pour accéder aux variables d'environnement, utilisez la syntaxe correspondant au shell de l'exécuteur de votre runner.
sh {#with-bash-and-sh}Pour accéder aux variables d'environnement dans Bash, sh et les shells similaires, préfixez la variable CI/CD avec $ :
job_name:
script:
- echo "$CI_JOB_ID"
Pour accéder aux variables dans un environnement Windows PowerShell, y compris les variables d'environnement définies par le système, préfixez le nom de la variable avec $env: ou $ :
job_name:
script:
- echo $env:CI_JOB_ID
- echo $CI_JOB_ID
- echo $env:PATH
Pour accéder aux variables CI/CD dans Windows Batch, entourez la variable avec % :
job_name:
script:
- echo %CI_JOB_ID%
Vous pouvez également entourer la variable avec ! pour l'expansion différée. L'expansion différée peut être nécessaire pour les variables contenant des espaces blancs ou des sauts de ligne :
job_name:
script:
- echo !ERROR_MESSAGE!
Les conteneurs de service peuvent utiliser des variables CI/CD, mais par défaut, ils ne peuvent accéder qu'aux variables enregistrées dans le fichier .gitlab-ci.yml. Les variables ajoutées dans l'interface utilisateur GitLab ne sont pas disponibles pour les conteneurs de service, car ces derniers ne sont pas approuvés par défaut.
Pour rendre disponible une variable définie dans l'interface utilisateur dans un conteneur de service, vous pouvez la réaffecter à une autre variable dans votre .gitlab-ci.yml :
variables:
SA_PASSWORD_YAML_FILE: $SA_PASSWORD_UI
La variable réaffectée ne peut pas avoir le même nom que la variable d'origine. Dans le cas contraire, elle ne sera pas développée.
Mettez entre guillemets les commandes de script et les valeurs de variables pour éviter les erreurs d'analyse YAML et shell :
Mettez entre guillemets les commandes entières lorsqu'elles contiennent des deux-points (:) pour éviter que YAML ne les interprète comme des paires clé-valeur :
job_name:
script:
- 'echo "Status: Complete"' # Single quotes prevent YAML colon parsing
Mettez les variables entre guillemets lorsque leurs valeurs peuvent contenir des espaces ou des caractères spéciaux :
job_name:
script:
- echo "$FILE_PATH" # Quote if FILE_PATH might have spaces
Évitez les guillemets lorsque vous souhaitez que les variables se développent en arguments shell distincts :
job_name:
variables:
COMPILE_FLAGS: "-Wall -Werror -O2"
script:
- gcc $COMPILE_FLAGS main.c # Expands to: gcc -Wall -Werror -O2 main.c
script vers artifacts ou cache {#pass-an-environment-variable-from-the-script-section-to-artifacts-or-cache}{{< history >}}
{{< /history >}}
Utilisez $GITLAB_ENV pour utiliser les variables d'environnement définies dans la section script dans les mots-clés artifacts ou cache. Par exemple :
build-job:
stage: build
script:
- echo "ARCH=$(arch)" >> $GITLAB_ENV
- touch some-file-$(arch)
artifacts:
paths:
- some-file-$ARCH
Vous ne pouvez pas créer une variable CI/CD qui soit un tableau de valeurs, mais vous pouvez utiliser des techniques de script shell pour un comportement similaire.
Par exemple, vous pouvez stocker plusieurs valeurs séparées par un espace dans une variable, puis itérer sur ces valeurs avec un script :
job1:
variables:
FOLDERS: src test docs
script:
- |
for FOLDER in $FOLDERS
do
echo "The path is root/${FOLDER}"
done
Vous pouvez utiliser des variables à l'intérieur d'autres variables :
job:
variables:
FLAGS: '-al'
LS_CMD: 'ls "$FLAGS"'
script:
- 'eval "$LS_CMD"' # Executes 'ls -al'
Vous pouvez utiliser des variables dans le cadre d'une chaîne. Vous pouvez entourer les variables avec des accolades ({}) pour mieux distinguer le nom de la variable du texte environnant. Sans accolades, le texte adjacent est interprété comme faisant partie du nom de la variable. Par exemple :
job:
variables:
FLAGS: '-al'
DIR: 'path/to/directory'
LS_CMD: 'ls "$FLAGS"'
CD_CMD: 'cd "${DIR}_files"'
script:
- 'eval "$LS_CMD"' # Executes 'ls -al'
- 'eval "$CD_CMD"' # Executes 'cd path/to/directory_files'
$ dans les variables CI/CD {#use-the--character-in-cicd-variables}Si vous ne souhaitez pas que le caractère $ soit interprété comme le début d'une autre variable, utilisez $$ à la place :
job:
variables:
FLAGS: '-al'
LS_CMD: 'ls "$FLAGS" $$TMP_DIR'
script:
- 'eval "$LS_CMD"' # Executes 'ls -al $TMP_DIR'
Cela ne fonctionne pas lors du passage d'une variable CI/CD à un pipeline downstream.