doc-locale/fr-fr/ci/jobs/job_inputs.md
{{< details >}}
{{< /details >}}
{{< history >}}
{{< /history >}}
Utilisez les entrées de job pour définir des paramètres typés et validés pour des jobs CI/CD individuels, qui peuvent être remplacés lors de l'exécution manuelle ou de la reprise des jobs. Contrairement aux variables CI/CD, les entrées de job offrent :
string, number, boolean ou array avec validation automatique.Utilisez les entrées de job pour les paramètres qui contrôlent le comportement du job et qui pourraient nécessiter des ajustements lors de la réexécution d'un job. Par exemple : les cibles de déploiement, les configurations de test ou les feature flags.
Les entrées de job ont une portée limitée au job où elles sont définies et ne sont pas accessibles dans les fichiers inclus ni dans d'autres jobs. Si vous avez besoin de partager une configuration entre des jobs ou des fichiers, utilisez plutôt les entrées de configuration CI/CD.
Les entrées de job et les entrées de configuration de pipeline CI/CD servent des objectifs différents :
| Fonctionnalité | Entrées de job | Entrées de configuration CI/CD |
|---|---|---|
| Objectif | Configurer le comportement d'un job individuel | Configurer des modèles et des composants réutilisables |
| Syntaxe | inputs: dans la définition du job | spec:inputs: dans l'en-tête de configuration |
| Interpolation | ${{ job.inputs.INPUT_NAME }} | $[[ inputs.INPUT_NAME ]] |
| Évaluation | Valeurs définies lors de la création du job, peuvent être remplacées lors de l'exécution/reprise | Valeurs définies lors de la création du pipeline, fixes pour l'ensemble du pipeline |
| Valeurs par défaut | Obligatoire | Facultatif |
| Portée | Un seul job uniquement | Fichier de configuration entier ou transmis aux fichiers inclus |
Les entrées de job sont interpolées dans la configuration du job lors de sa création. Elles ne sont pas des variables d'environnement et ne sont pas accessibles avec la syntaxe $INPUT_NAME. Vous pouvez utiliser les entrées de job directement dans les scripts et d'autres mots-clés pris en charge avec la syntaxe ${{ job.inputs.INPUT_NAME }}.
Utilisez le mot-clé inputs dans un job pour définir des paramètres d'entrée. Chaque entrée doit avoir une valeur par défaut. Référencez les valeurs d'entrée avec la syntaxe d'expression Moa ${{ job.inputs.INPUT_NAME }}.
Par exemple :
deploy_job:
inputs:
target_env:
default: staging
options: [staging, production]
replicas:
type: number
default: 3
debug_mode:
type: boolean
default: false
script:
- 'echo "Deploying to ${{ job.inputs.target_env }}"'
- 'echo "Replicas - ${{ job.inputs.replicas }}"'
- 'if [ "${{ job.inputs.debug_mode }}" == "true" ]; then set -x; fi'
- ./deploy.sh
Configurez les entrées avec ces mots-clés :
default : La valeur par défaut utilisée lors de l'exécution du job. Toutes les entrées de job doivent avoir des valeurs par défaut.type : facultatif. Le type d'entrée. Peut être string (par défaut), number, boolean ou array.description : facultatif. Une description lisible par l'humain de l'objectif de l'entrée.options : facultatif. Une liste de valeurs autorisées. L'entrée doit correspondre à l'une de ces valeurs.regex : facultatif. Un modèle d'expression régulière auquel l'entrée doit correspondre.Par exemple :
test_job:
inputs:
test_framework:
default: rspec
description: Testing framework to use
options: [rspec, minitest, cucumber]
parallel_count:
type: number
default: 5
description: Number of parallel test jobs
run_integration_tests:
type: boolean
default: false
description: Whether to run integration tests
test_tags:
type: array
default: [smoke, regression]
description: Test tags to run
script:
- bundle exec ${{ job.inputs.test_framework }}
- 'echo "Running ${{ job.inputs.parallel_count }} parallel jobs"'
Les entrées de job sont validées lors de la création du job et lors du remplacement des valeurs d'entrée. Si la validation échoue, le job ne démarre pas et affiche un message d'erreur clair.
Les entrées de job prennent en charge ces types :
string (par défaut) : Valeurs textuelles, par exemple "staging" ou "v1.2.3".number : Valeurs numériques, par exemple 5, 3.14 ou -10.boolean : Valeurs booléennes, soit true soit false.array : Liste de valeurs, par exemple [1, 2, 3] ou ["a", "b"].Lors de la transmission de valeurs d'entrée via l'API ou l'interface utilisateur, les tableaux doivent être au format JSON, par exemple : ["value1", "value2"].
Vous pouvez utiliser une interpolation simple ou des expressions plus complexes avec des opérateurs et des fonctions. Consultez le langage d'expression Moa pour la syntaxe complète.
Les entrées de job peuvent être utilisées dans ces mots-clés de job et leurs sous-clés :
script, before_script et after_scriptartifactscacheimageservicesLes entrées de job utilisent la syntaxe ${{ job.inputs.INPUT_NAME }} qui est évaluée lors de l'exécution du job, et non lors de la création de la configuration du pipeline. Vous ne pouvez pas utiliser les entrées de job dans les parties de la configuration qui doivent être évaluées lors de la création du pipeline, telles que :
stagerulesincludePour configurer ces parties de votre pipeline de manière dynamique, utilisez plutôt les entrées de configuration de pipeline CI/CD avec la syntaxe $[[ inputs.* ]].
Vous pouvez fournir des valeurs d'entrée de job dans les cas suivants :
Lorsque vous exécutez un job manuel dont des entrées sont définies, vous pouvez spécifier les valeurs d'entrée.
Pour exécuter un job manuel avec des entrées spécifiques :
Lorsque vous réessayez un job dont des entrées sont définies, vous pouvez mettre à jour les valeurs d'entrée.
Pour réessayer un job avec d'autres entrées :
Pour réessayer avec les mêmes valeurs d'entrée, sélectionnez plutôt Réessayer ({{< icon name="retry" >}}).
deploy:
when: manual
inputs:
target_env:
default: staging
description: Target deployment environment
options: [staging, production]
version:
default: latest
description: Application version to deploy
script:
- 'echo "Deploying version ${{ job.inputs.version }} to ${{ job.inputs.target_env }}"'
- ./deploy.sh --env ${{ job.inputs.target_env }} --version ${{ job.inputs.version }}
integration_tests:
inputs:
test_suite:
default: smoke
description: Which test suite to run
options: [smoke, regression, full]
parallel_jobs:
type: number
default: 5
description: Number of parallel test runners
enable_debug:
type: boolean
default: false
description: Enable debug logging
tags:
type: array
default: ["critical"]
description: Test tags to run
script:
- 'if [ "${{ job.inputs.enable_debug }}" == "true" ]; then export DEBUG=1; fi'
- ./run_tests.sh
--suite ${{ job.inputs.test_suite }}
--parallel ${{ job.inputs.parallel_jobs }}
--tags '${{ job.inputs.tags }}'
migrate_database:
when: manual
inputs:
target_db:
default: development
description: Database environment
options: [development, staging, production]
migration_name:
default: ""
description: Specific migration to run (leave empty for all)
regex: ^[a-zA-Z0-9_]*$
dry_run:
type: boolean
default: true
description: Run in dry-run mode without applying changes
script:
- 'echo "Running migrations on ${{ job.inputs.target_db }}"'
- |
if [ "${{ job.inputs.dry_run }}" == "true" ]; then
echo "DRY RUN MODE - no changes will be applied"
MIGRATION_FLAGS="--dry-run"
fi
- |
if [ -n "${{ job.inputs.migration_name }}" ]; then
./migrate.sh $MIGRATION_FLAGS --migration ${{ job.inputs.migration_name }}
else
./migrate.sh $MIGRATION_FLAGS --all
fi
Vous pouvez spécifier des valeurs d'entrée de job lors de l'utilisation de l'API pour exécuter ou réessayer des jobs.
Utilisez le endpoint POST /projects/:id/jobs/:job_id/play avec le paramètre job_inputs :
curl --request POST \
--header "PRIVATE-TOKEN: <your_token>" \
--header "Content-Type: application/json" \
--data '{
"job_inputs": {
"environment": "staging",
"version": "v2.1.0"
}
}' \
"https://gitlab.example.com/api/v4/projects/1/jobs/456/play"
Utilisez le endpoint POST /projects/:id/jobs/:job_id/retry avec le paramètre job_inputs :
curl --request POST \
--header "PRIVATE-TOKEN: <your_token>" \
--header "Content-Type: application/json" \
--data '{
"job_inputs": {
"environment": "production",
"replicas": 10
}
}' \
"https://gitlab.example.com/api/v4/projects/1/jobs/123/retry"
Vous pouvez utiliser la mutation jobPlay ou la mutation jobRetry avec un argument inputs :
mutation {
jobPlay(input: {
id: "gid://gitlab/Ci::Build/123",
inputs: [
{ name: "environment", value: "production" },
{ name: "replicas", value: 10 }
]
}) {
job {
id
status
}
errors
}
}
input must have a default value {#job-fails-with-input-must-have-a-default-value}Les entrées de job doivent toujours avoir des valeurs par défaut pour garantir que les jobs peuvent s'exécuter dans des pipelines où les entrées ne peuvent pas être spécifiées manuellement.
Pour corriger cette erreur, ajoutez un default à chaque entrée :
my_job:
inputs:
target_env:
default: staging # Default specified
script:
- echo ${{ job.inputs.target_env }}
unexpected value {#input-validation-fails-with-unexpected-value}Lorsque la validation des entrées échoue, vérifiez :
options, assurez-vous que la valeur correspond exactement à l'une des options autorisées (sensible à la casse).regex, vérifiez que votre expression régulière correspond à la valeur d'entrée.type: number, assurez-vous que la valeur est numérique et non une chaîne de caractères.type: array, assurez-vous que la valeur est formatée en tableau JSON lors de la transmission via l'API.