Gibt es eine Möglichkeit, eine manuelle Genehmigung in Jenkins 2-Pipelines einzufügen?

19

Jenkins 2 hat Pipelines und einen erstklassigen Bürger. In den Beispielen scheinen die Aufgaben jedoch als einzelne Sequenz ausgeführt zu werden:

node {
   // Mark the code checkout 'stage'....
   stage 'Checkout'

   // Get some code from a GitHub repository
   git url: '[email protected]:elifesciences/elife-bot.git'

   // Mark the code build 'stage'....
   stage 'Build'
   echo "Unit tests will run here"

   stage "Production"
   echo "Deploying to production environment"
}

Für die Bereitstellung im Produktionssystem ist es oft nützlich, eine manuelle Genehmigung zu verlangen. Gibt es eine Möglichkeit, eine manuelle Schaltfläche zum Drücken in eine Pipeline einzufügen?

Ich habe nach möglichen Schritten gesucht, um dies in den Dokumenten zu erreichen , ohne Erfolg.

giorgiosironi
quelle
Ich kenne Jenkins nicht, aber gibt es keine Möglichkeit, Ihren Build-Plan in mehrere Schritte aufzuteilen und einige dieser Schritte nur mit einem "manuellen Trigger" auszuführen?
Tiktak
Bisher beste Teillösung: Ein inputSchritt in der Pipeline, der anhält und den Benutzer zur Eingabe auffordert (oder den Build abbricht). Die Bühne und die Statusanzeige blinken jedoch weiter, während ich einen stabilen Zustand haben wollte (z. B. Sie steigen in den Freitagnachmittag ein und beschließen, ihn am Montag einzusetzen.)
giorgiosironi

Antworten:

18

Die Eingabe ist die Option, nach der Sie suchen. So benutze ich es. Es ist wichtig, den Schritt außerhalb eines Knotens zu haben, sonst lässt Jenkins einen Agenten auf den nächsten Schritt warten. Beachten Sie, dass der zweite Knoten möglicherweise nicht denselben Arbeitsbereich wie der erste verwendet.

node {
    stage('build'){
        echo "building"
    }
}
stage('Deploy approval'){
    input "Deploy to prod?"
}
node {
    stage('deploy to prod'){
        echo "deploying"
    }
}
Steve Miskiewicz
quelle
Was passiert mit den älteren Pipelines, die nicht für die Produktion bereitgestellt werden, wenn mehrere Pipelines dorthin gelangen können? Gibt es eine Möglichkeit, die älteren davon abzuhalten, in einem unvollständigen Zustand zu bleiben (ich weiß nicht, ob sie blinken werden)?
Giorgiosironi
1
Soweit ich das beurteilen kann, blinkt es für immer, bis Sie auf Abbrechen klicken, was ziemlich beschissen ist. Sie könnten wahrscheinlich eine Zeitüberschreitung einrichten, um zu verhindern, dass einige von diesen verloren gehen. Nach dem Timeout verlieren Sie jedoch die Fähigkeit zur Bereitstellung. jenkins.io/doc/pipeline/steps/workflow-basic-steps/…
Steve Miskiewicz
1
Ich habe nicht verstanden, dass die Eingabe so konfiguriert werden kann, dass kein Agent zurückgehalten wird. Dies macht die Eingabe viel nützlicher.
Djhaskin987
Wäre schön, die Möglichkeit zu haben, eine Version erneut bereitzustellen, ohne sie zu erstellen, oder die vorherige Version bereitzustellen.
Tehnicaorg
1

Am Ende habe ich separate test-projectund prod-projectPipelines erstellt, bei denen am Ende test-projectder Code zu einer approvedVerzweigung zusammengeführt wird.

Anschließend kann die prod-projectPipeline so eingerichtet werden, dass sie nicht bei jedem neuen Commit ausgelöst wird, sodass sie bei Bedarf bereitgestellt werden kann.

giorgiosironi
quelle
0

Darüber hinaus können Sie auch eine automatische Zeitüberschreitung wie unten hinzufügen

        stage('build') {
        steps {
            sh  """
                # Some commands
                """
            script {
              timeout(time: 10, unit: 'MINUTES') {
                input(id: "Deploy Gate", message: "Deploy ${params.project_name}?", ok: 'Deploy')
              }
            }
        }
    }

    stage('deploy') {
        when {
            branch 'master'
        }
        steps {
            sh  """
                # some commands
                """
        }
    }

Wenn Sie nachschlagen, können Sie die Jenkins-Eingaben auch an Anmeldeinformationen von Benutzern binden, die auf Jenkins zugreifen, wenn Sie nur bestimmten Personen die Möglichkeit zur Beantwortung gewähren möchten. Dies wird auch durch die Tatsache untermauert, dass auch Ihre Git-Steuerelemente ausreichen.

Kru
quelle
0

Dies ist nur ein einfaches Beispiel, aber Sie können es nach Bedarf auslösen.

stage{
    script{
        input "Continue?"
        ...enter code here
        ...
    }
}
Oren
quelle
0

Ich habe, wie unten gezeigt, die folgenden Dokumente gelesen: https://jenkins.io/doc/book/pipeline/syntax/

pipeline {
environment {
    BRANCH_NAME = "${env.BRANCH_NAME}"
}
agent any
stages{
    stage('Build-Initiator-Info'){
            steps{
                sh 'echo "Send Info"'
            }
    }
    stage('Build') {
        steps{
             catchError {
                sh 'echo "This is build"'
            }
         }
         post {
            success {
                echo 'Compile Stage Successful . . .'
            }
            failure {
                echo 'Compile stage failed'
                error('Stopping early…')

             }
    }
   }
  stage ('Deploy To Prod'){
  input{
    message "Do you want to proceed for production deployment?"
  }
    steps {
                sh 'echo "Deploy into Prod"'

              }
        }
  }
   }
user5956891
quelle