doc-locale/fr-fr/ci/yaml/script_troubleshooting.md
Syntax is incorrect dans les scripts qui utilisent : {#syntax-is-incorrect-in-scripts-that-use-}Si vous utilisez un deux-points (:) dans un script, GitLab peut afficher :
Syntax is incorrectscript config should be a string or a nested array of strings up to 10 levels deepPar exemple, si vous utilisez "PRIVATE-TOKEN: ${PRIVATE_TOKEN}" dans le cadre d'une commande cURL :
pages-job:
stage: deploy
script:
- curl --header 'PRIVATE-TOKEN: ${PRIVATE_TOKEN}' "https://gitlab.example.com/api/v4/projects"
environment: production
Le parseur YAML considère que : définit un mot-clé YAML et génère l'erreur Syntax is incorrect.
Pour utiliser des commandes contenant un deux-points, vous devez encapsuler la commande entière entre guillemets simples. Vous devrez peut-être remplacer les guillemets simples existants (') par des guillemets doubles (") :
pages-job:
stage: deploy
script:
- 'curl --header "PRIVATE-TOKEN: ${PRIVATE_TOKEN}" "https://gitlab.example.com/api/v4/projects"'
environment: production
&& dans un script {#job-does-not-fail-when-using--in-a-script}Si vous utilisez && pour combiner deux commandes dans une seule ligne de script, le job peut se terminer avec succès, même si l'une des commandes a échoué. Par exemple :
job-does-not-fail:
script:
- invalid-command xyz && invalid-command abc
- echo $?
- echo "The job should have failed already, but this is executed unexpectedly."
L'opérateur && retourne un code de sortie 0 même si les deux commandes ont échoué, et le job continue de s'exécuter. Pour forcer le script à se terminer lorsque l'une ou l'autre des commandes échoue, encapsulez la ligne entière entre parenthèses :
job-fails:
script:
- (invalid-command xyz && invalid-command abc)
- echo "The job failed already, and this is not executed."
Si vous utilisez le scalaire de bloc YAML multilignes replié - > pour fractionner des commandes longues, une indentation supplémentaire entraîne le traitement des lignes comme des commandes individuelles.
Par exemple :
script:
- >
RESULT=$(curl --silent
--header
"Authorization: Bearer $CI_JOB_TOKEN"
"${CI_API_V4_URL}/job"
)
Cela échoue car l'indentation entraîne la préservation des sauts de ligne :
$ RESULT=$(curl --silent # collapsed multi-line command
curl: no URL specified!
curl: try 'curl --help' or 'curl --manual' for more information
/bin/bash: line 149: --header: command not found
/bin/bash: line 150: https://gitlab.example.com/api/v4/job: No such file or directory
Pour résoudre ce problème, procédez de l'une des façons suivantes :
Supprimez l'indentation supplémentaire :
script:
- >
RESULT=$(curl --silent
--header
"Authorization: Bearer $CI_JOB_TOKEN"
"${CI_API_V4_URL}/job"
)
Modifiez le script pour gérer les sauts de ligne supplémentaires, par exemple en utilisant la continuation de ligne shell :
script:
- >
RESULT=$(curl --silent \
--header \
"Authorization: Bearer $CI_JOB_TOKEN" \
"${CI_API_V4_URL}/job")
Parfois, le formatage dans le job log s'affiche incorrectement avec des outils qui dépendent de la variable d'environnement TERM pour la colorisation ou le formatage. Par exemple, avec la commande mypy :
GitLab Runner exécute le shell du conteneur en mode non interactif, de sorte que la variable d'environnement TERM du shell est définie sur dumb. Pour corriger le formatage pour ces outils, vous pouvez :
TERM=ansi dans l'environnement du shell avant d'exécuter la commande.TERM avec la valeur ansi.after_script s'arrête prématurément et les valeurs $CI_JOB_STATUS sont incorrectes {#after_script-section-execution-stops-early-and-incorrect-ci_job_status-values}Dans GitLab Runner 16.9.0 à 16.11.0 :
after_script s'arrête parfois trop tôt.$CI_JOB_STATUS est défini de manière incorrecte sur failed pendant l'annulation du job.