Jenkins 2 boru hatlarına manuel onay eklemenin bir yolu var mı?


19

Jenkins 2'nin boru hatları var, birinci sınıf bir vatandaş. Bununla birlikte, örneklerde görevler tek bir sıra halinde yürütülmektedir:

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

Üretim sistemine dağıtım için manuel onay istemek genellikle yararlıdır; boru hattının içine basmak için manuel bir düğme eklemenin bir yolu var mı?

Ben bunu boşuna , dokümanlar üzerinde bunu gerçekleştirmek için olası adımlar arıyordum .


Jenkins bilmiyorum, ancak yapı planınızı birkaç adıma bölmenin bir yolu yok ve bu adımlardan bazılarının yalnızca "manuel tetikleyici" üzerinde çalıştırılması mümkün değil mi?
tiktak

Şimdiye kadarki en iyi kısmi çözüm: inputboru hattında durduran ve kullanıcıdan giriş (veya yapıyı iptal etme) isteyen bir adım. Ancak, istikrarlı bir durum istediğimde sahne ve durum göstergesi yanıp sönmeye devam ediyor (örneğin, Cuma öğleden sonra girip Pazartesi günü konuşlandırmaya karar
veriyorsunuz

Yanıtlar:


18

input , aradığınız seçenektir. İşte bu şekilde kullanıyorum. Adımın bir düğümün dışında olması önemlidir, aksi takdirde jenkinler bir sonraki adımı bekleyen bir ajan tutacaktır. İkinci düğümün birinciyle aynı çalışma alanını kullanmayabileceğini unutmayın.

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

Oraya birden fazla boru hattı gelebileceği düşünüldüğünde, üretime konuşlandırılmayan yaşlı boru hatlarına ne olur? Daha yaşlı olanların orada kalmasını (yanıp sönüp yanıp sönmeyeceklerini bilmiyorum) durdurmanın bir yolu var mı?
giorgiosironi

1
anlatabildiğim kadarıyla son derece tıkırtı, oldukça berbat tıklayın kadar sonsuza kadar yanıp söner. muhtemelen bazılarının kaybolmasını önlemek için bir zaman aşımı ayarlayabilirsiniz. Zaman aşımından sonra dağıtma yeteneğini kaybedersiniz. jenkins.io/doc/pipeline/steps/workflow-basic-steps/…
Steve Miskiewicz

1
O girişi için yapılandırılabilir anlayamadığını değil bir ajan yukarıda tutun. Bu, giriş yolunu daha kullanışlı hale getirir.
djhaskin987

Bir sürümü oluşturmadan, yeniden dağıtma veya önceki sürümü dağıtma olanağına sahip olmak güzel olurdu.
tehnicaorg

1

Sonunda, kodun sonunda bir dala birleştirildiği ayrı test-projectve prod-projectboru hatları oluşturdum .test-projectapproved

Daha sonra, prod-projectboru hattı her yeni taahhüt için tetiklenmeyecek şekilde ayarlanabilir, böylece isteğe bağlı olarak dağıtılabilir.


0

Ayrıca, aşağıdaki gibi otomatik zaman aşımı da ekleyebilirsiniz

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

Eğer bakarsanız, sadece belirli kişilerin cevap verebilmesine izin vermek istiyorsanız, jenkins girdisini Jenkins'e erişen kullanıcıların kimlik bilgilerine bağlayabilirsiniz - ayrıca Git kontrollerinizin de yeterli olması ile desteklenir.


0

Bu sadece basit bir örnektir, ancak ihtiyacınız olduğunda tetikleyebilirsiniz.

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

0

Bu dokümanı okuyarak aşağıda gösterildiği gibi yaptım 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"'

              }
        }
  }
   }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.