Apakah ada cara untuk memasukkan persetujuan manual dalam pipa Jenkins 2?


19

Jenkins 2 memiliki jaringan pipa memiliki warga negara kelas satu. Namun, dalam contoh-contoh tugas tampaknya dieksekusi sebagai urutan tunggal:

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

Untuk penyebaran ke dalam sistem produksi, seringkali perlu persetujuan manual; apakah ada cara untuk memasukkan tombol manual untuk menekan di dalam pipa?

Saya telah mencari langkah-langkah yang mungkin untuk mencapai ini pada dokumen , tetapi tidak berhasil.


Saya tidak tahu Jenkins, tetapi tidak adakah cara untuk membagi rencana pembangunan Anda menjadi beberapa langkah, dan meminta beberapa langkah ini dijalankan hanya dengan "pemicu manual"?
tiktak

Solusi parsial terbaik sejauh ini: inputlangkah dalam pipa yang berhenti dan meminta input dari pengguna (atau untuk membatalkan pembuatan). Namun, panggung dan indikator status terus berkedip sementara saya ingin keadaan stabil (misalnya Anda masuk ke sana Jumat sore dan memutuskan untuk menggunakan pada hari Senin.)
giorgiosironi

Jawaban:


18

input adalah opsi yang Anda cari. Inilah cara saya menggunakannya. Sangat penting untuk memiliki langkah di luar simpul, jika tidak jenkins akan menahan agen menunggu langkah selanjutnya. Ingat node kedua mungkin tidak menggunakan ruang kerja yang sama dengan yang pertama.

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

Mengingat banyak pipa bisa sampai di sana, apa yang terjadi pada yang lebih tua yang tidak dikerahkan untuk produksi? Apakah ada cara untuk menghentikan yang lama dari tetap di sana (tidak tahu apakah mereka akan berkedip) dalam keadaan tidak lengkap?
giorgiosironi

1
sejauh yang saya tahu itu akan berkedip selamanya sampai Anda mengklik batalkan, yang cukup jelek. Anda mungkin dapat mengatur batas waktu untuk mencegah beberapa dari ini hilang. Setelah batas waktu Anda akan kehilangan kemampuan untuk menggunakannya. jenkins.io/doc/pipeline/steps/workflow-basic-steps/…
Steve Miskiewicz

1
Saya tidak mengerti bahwa input dapat dikonfigurasi untuk tidak memegang agen. Ini membuat input jauh lebih berguna.
djhaskin987

Akan menyenangkan untuk memiliki kemungkinan untuk menggunakan kembali versi, tanpa membangun, atau menggunakan versi sebelumnya.
tehnicaorg

1

Pada akhirnya saya membuat jalur terpisah test-projectdan prod-projectpipa, di mana pada akhir test-projectkode digabung menjadi approvedcabang.

Kemudian, prod-projectpipa dapat diatur untuk tidak memicu setiap komit baru sehingga dapat digunakan sesuai permintaan.


0

Selain itu, Anda juga dapat menambahkan batas waktu otomatis seperti di bawah ini

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

Jika Anda mencarinya, Anda juga dapat mengikat input jenkins ke kredensial pengguna yang mengakses Jenkins jika Anda hanya ingin mengizinkan orang-orang tertentu untuk dapat menjawab - itu juga didukung oleh fakta bahwa kontrol Git Anda juga memadai.


0

Ini hanyalah contoh sederhana tetapi Anda dapat memicunya sesuai kebutuhan.

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

0

Saya melakukannya seperti yang ditunjukkan di bawah ini dengan membaca dokumen ini 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"'

              }
        }
  }
   }
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.