Jenkins deklaratif boru hattında Yapay Eklenti kullanma


13

Yapım sürecimi otomatikleştirmek için Jenkins Declarative Pipeline kullanıyorum. Yapıtlarımızı yalnızca belirli koşullar (Sonar, Checkmarx) geçtiğinde uzak bir JFrog deposuna yayınlamak istiyoruz.

Biraz araştırma yaptıktan sonra, Artifactory eklentisinin bunun için yararlı olduğunu buldum. Ancak bildirimsel boru hattına nasıl entegre edileceğine dair herhangi bir belge bulamıyorum. Aşağıda Jenkinsfile kod pasajı bulunmaktadır

stages{

    stage('Pre-Build'){
        steps{

             script{
                def server = Artifactory.server 'LocalJfrog'
                def rtGradle = Artifactory.newGradleBuild()
                rtGradle.resolver server: server, repo: 'gradle-dev-local'
                rtGradle.deployer server: server, repo: 'gradle-release-local'
                rtGradle.useWrapper = true
            }

        }   
    }
}

Koşullu yayımlama yukarıdaki kodla mümkün değildir, çünkü otomatik yayınlamayı devre dışı bıraksam bile sunucu değişkenini yeniden kullanamıyorum .

Yanıtlar:


3

Bir aşamanın içindeki when -block öğesini kullanarak bildirimsel ardışık düzeninizde koşullu koşullara sahip olabilirsiniz . Değişkenleri boru hattı komut dosyasının dışında ayarlamanıza izin veren "çevre enjektörü" adlı bir eklenti var. Ayrıca, adımı diğer adımların altına koyarsanız, başarısız olursa yürütülmez.

 when {
    environment name: 'pushArtifact', value: 'true'
  }
  steps{
     //push artifact  
  }

İpucu için teşekkürler. Eğer doğru anladıysam, şartlar yerine getirildikten sonra bir değişkenin ayarlanması gerekir ve sonra bu değişkeni İnşaat Öncesi adımda kontrol edin
Dharanidhar

2

Sorununuzun, sunucu değişkeni için önceden oluşturma aşaması bloğunun dışında yeniden kullanılamayacağını düşünüyorum .

Jenkins bildirgesinde, script { ... }bloğu kullanarak böyle değişkenler tanımlayabilirsiniz , ancak aşamadan çıktıktan sonra bu değişkenlere aşamalardan diğerine erişilemez.

Önceki önerileri ile bunu tavsiye ederim:

Yapay dağıtım kodunu paylaşılan bir kütüphaneye yerleştirin.

gradle_artifactory.groovy

    def call (Harita parametreleri = [:]) {// isteğe bağlı parametre eşleme

        def server = Artifactory.server 'LocalJfrog'
        def rtGradle = Artifactory.newGradleBuild ()
        rtGradle.resolver sunucusu: sunucu, repo: 'gradle-dev-local'
        rtGradle.deployer sunucusu: sunucu, repo: 'gradle-release-local'
        rtGradle.useWrapper = true
        def buildInfo = rtGradle.run rootDir: "projectDir /", buildFile: 
            'build.gradle', görevler: 'clean artifactoryPublish'

    }

Sonra bildirimsel boru hatlarınızı korumak için D.R.Y

@Library('my-shared-lib') 
...
stage('Artifactory Upload') {
    when { <some expression with sonarqube/checkmarx> }
    steps {
        script {
            gradle_artifactory()
        }
    }
}

ref:

https://jenkins.io/doc/book/pipeline/syntax/#when

https://jenkins.io/doc/book/pipeline/shared-libraries/


1

Mantık Jenkinsfile içine gömmek istiyorsanız, bildirim sözdizimi en iyi yöntem olmayabilir çünkü kodda her zaman kolay yansıtılamaz.

Jenkinsfile kodlu boru hattına geçtiyseniz, koşulları daha kolay bir şekilde tanımlayabilir ve kullanabilirsiniz.


1
Cevap için teşekkürler. Ben senaryolu boru hattının farkındayım, ancak bu, bildirimsel boru hattına dahil edileceği düşünülen herhangi bir proje için temel bir gerekliliktir. O zaman Scripted veya harici groovy betiğine
dönecek
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.