Lors de l'utilisation de entrée il est très important d'utiliser agent aucun au niveau global du pipeline, et affecter des agents aux différentes étapes. Placer le entrée dans une étape distincte qui utilise également des agent aucun . Si vous allouez un nœud d'agent pour l'étape d'entrée, cet exécuteur d'agent restera réservé par cette construction jusqu'à ce qu'un utilisateur poursuive ou interrompe le processus de construction.
Cet exemple devrait vous aider à utiliser l'entrée :
def approvalMap // collect data from approval step
pipeline {
agent none
stages {
stage('Stage 1') {
agent none
steps {
timeout(60) { // timeout waiting for input after 60 minutes
script {
// capture the approval details in approvalMap.
approvalMap = input id: 'test', message: 'Hello', ok: 'Proceed?', parameters: [choice(choices: 'apple\npear\norange', description: 'Select a fruit for this build', name: 'FRUIT'), string(defaultValue: '', description: '', name: 'myparam')], submitter: 'user1,user2,group1', submitterParameter: 'APPROVER'
}
}
}
}
stage('Stage 2') {
agent any
steps {
// print the details gathered from the approval
echo "This build was approved by: ${approvalMap['APPROVER']}"
echo "This build is brought to you today by the fruit: ${approvalMap['FRUIT']}"
echo "This is myparam: ${approvalMap['myparam']}"
}
}
}
}
Lorsque la fonction d'entrée revient, si elle n'a qu'un seul paramètre à renvoyer, elle renvoie directement cette valeur. Si l'entrée contient plusieurs paramètres, elle renvoie une carte (hachage, dictionnaire) des valeurs. Pour capturer cette valeur, nous devons passer au scriptage groovy.
Une bonne pratique consiste à envelopper votre code d'entrée dans une étape de temporisation afin que la construction ne reste pas dans un état non résolu pendant une période prolongée.