Esiste un modo per inserire un'approvazione manuale nelle condotte Jenkins 2?


19

Jenkins 2 ha pipeline ha un cittadino di prima classe. Tuttavia, negli esempi le attività sembrano essere eseguite come un'unica sequenza:

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

   // Get some code from a GitHub repository
   git url: 'git@github.com:elifesciences/elife-bot.git'

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

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

Per l'implementazione nel sistema di produzione è spesso utile richiedere l'approvazione manuale; c'è un modo per inserire un pulsante manuale da premere all'interno di una pipeline?

Ho cercato possibili passaggi per ottenere questo risultato sui documenti , senza risultati.


Non conosco Jenkins, ma non esiste un modo per dividere il piano di compilazione in più passaggi e avere alcuni di questi passaggi da eseguire solo su un "trigger manuale"?
tiktak,

La migliore soluzione parziale finora: un inputpasso nella pipeline che si interrompe e chiede all'utente l'input (o l'interruzione della generazione). Tuttavia, il palcoscenico e l'indicatore di stato continuano a lampeggiare mentre volevo uno stato stabile (ad esempio,
entrerai

Risposte:


18

input è l'opzione che stai cercando. Ecco come lo sto usando. È importante avere il passaggio all'esterno di un nodo, altrimenti Jenkins terrà un agente in attesa del passaggio successivo. Tenere presente che il secondo nodo potrebbe non utilizzare lo stesso spazio di lavoro del primo.

node {
    stage('build'){
        echo "building"
    }
}
stage('Deploy approval'){
    input "Deploy to prod?"
}
node {
    stage('deploy to prod'){
        echo "deploying"
    }
}

Dato che possono arrivare più pipeline, cosa succede ai più vecchi che non vengono distribuiti alla produzione? C'è un modo per impedire ai più vecchi di rimanere lì (non so se lampeggeranno) in uno stato incompleto?
giorgiosironi,

1
per quanto ne so, lampeggerà per sempre fino a quando non si fa clic su Interrompi, il che è piuttosto scadente. probabilmente potresti impostare un timeout per evitare che alcuni di questi vengano persi. Tuttavia, dopo il timeout perdi la possibilità di distribuirlo. jenkins.io/doc/pipeline/steps/workflow-basic-steps/…
Steve Miskiewicz,

1
Non capivo che l'input potesse essere configurato per non trattenere un agente. Questo rende l'input molto più utile.
djhaskin987,

Sarebbe bello avere la possibilità di ridistribuire una versione, senza creare, o distribuire la versione precedente.
tehnicaorg,

1

Alla fine ho creato separati test-projecte prod-projectpipeline, dove alla fine del test-projectcodice viene unito in un approvedramo.

Quindi, la prod-projectpipeline può essere impostata in modo da non attivarsi per ogni nuovo commit in modo che possa essere distribuita su richiesta.


0

Inoltre, puoi anche aggiungere il timeout automatico come di seguito

        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
                """
        }
    }

Se lo cerchi, puoi anche associare l'input di jenkins alle credenziali degli utenti che accedono a Jenkins se desideri consentire a determinate persone di essere in grado di rispondere - è anche sostenuto dal fatto che anche i tuoi controlli Git sono sufficienti.


0

Questo è solo un semplice esempio, ma puoi attivarlo come ti serve.

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

0

Ho fatto come mostrato di seguito leggendo questi documenti 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"'

              }
        }
  }
   }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.