Bei der Verwendung von Eingang, ist es sehr wichtig, Mittel keine auf der globalen Pipeline-Ebene zu verwenden, und Agenten zu einzelnen Stufen zuordnen. Setzen Sie die Eingabe Verfahren in einer separaten Phase, die auch verwendet Agent keine. Wenn Sie einen Agentenknoten für die Eingabestufe zuweisen, bleibt dieser Agent-Executor von diesem Build reserviert, bis ein Benutzer den Buildprozess fortsetzt oder abbricht.
Dieses Beispiel sollte bei der Verwendung der Eingabehilfe:
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']}"
}
}
}
}
Wenn die Eingabefunktion zurückkehrt, wenn es nur einen einzigen Parameter zurückgeben muss, es direkt dieser Wert zurückgibt. Wenn in der Eingabe mehrere Parameter vorhanden sind, wird eine Zuordnung (Hash, Wörterbuch) der Werte zurückgegeben. Um diesen Wert zu erfassen, müssen wir auf grooviges Scripting zurückgreifen.
Es empfiehlt sich, den Eingabecode in einen Zeitüberschreitungsschritt zu schreiben, damit der Build nicht längere Zeit in einem nicht aufgelösten Zustand verbleibt.
Ich würde mich freuen, wenn Sie meine Antwort akzeptieren könnten, wenn es Ihr Problem gelöst hat. –