Utilizzo del plug-in Artifactory nella pipeline dichiarativa di Jenkins


13

Sto usando la pipeline dichiarativa di Jenkins per automatizzare il mio processo di compilazione. Vogliamo pubblicare i nostri artefatti su un repository JFrog remoto solo se determinate condizioni (Sonar, Checkmarx) passano.

Dopo un po 'di ricerche, ho scoperto che il plugin Artifactory è utile per questo. Ma non riesco a trovare alcun documento su come integrare nella pipeline dichiarativa. Di seguito è riportato lo snippet di codice di Jenkinsfile

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
            }

        }   
    }
}

La pubblicazione condizionale non è possibile con il codice sopra poiché non riesco a riutilizzare la variabile del server anche se disabilito la pubblicazione automatica.

Risposte:


3

Puoi avere condizionali nella tua pipeline dichiarativa usando il blocco di quando all'interno di uno stage. C'è un plugin chiamato "ambiente injector" che ti permette di impostare variabili al di fuori dello script della pipeline, il che è carino. Inoltre, se metti il ​​passaggio sotto gli altri, non verrà eseguito se falliscono.

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

Grazie per il suggerimento. Se ho capito bene, una variabile deve essere impostata dopo che sono state soddisfatte le condizioni e quindi controlla quella variabile nel passaggio Pre-Build
Dharanidhar,

2

Penso che il tuo problema sia radicato nella variabile del server non riutilizzabile al di fuori del blocco di fase pre-build.

Nel dichiarativo Jenkins, puoi definire variabili come quella usando il script { ... }blocco, ma una volta che lasci lo stage quelle variabili sono inaccessibili alle altre per gli stage.

Con i suggerimenti precedenti, consiglierei questo:

Ospita il codice di distribuzione artificiale in una libreria condivisa.

gradle_artifactory.groovy

    def call (Parametri mappa = [:]) {// mappatura parametri opzionale

        def server = Artifactory.server 'LocalJfrog'
        def rtGradle = Artifactory.newGradleBuild ()
        server rtGradle.resolver: server, repository: 'gradle-dev-local'
        Server rtGradle.deployer: server, repository: 'gradle-release-local'
        rtGradle.useWrapper = true
        def buildInfo = rtGradle.run rootDir: "projectDir /", buildFile: 
            'build.gradle', attività: 'clean artifactoryPublish'

    }

Quindi per mantenere le tubazioni dichiarative D.R.Y

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

arbitri:

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

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


1

Se si desidera incorporare la logica nel file Jenkins, la sintassi dichiarativa potrebbe non essere il metodo migliore in quanto non è sempre facile rifletterla nel codice.

Se si passasse alla pipeline con script Jenkinsfile, sarebbe possibile definire e utilizzare le condizioni in modo più semplice.


1
Grazie per la risposta. Sono a conoscenza della pipeline con script, ma da allora, questa è una necessità di base per qualsiasi progetto pensato che sarebbe stato incluso nella pipeline dichiarativa. Tornerà quindi alla sceneggiatura sceneggiata o esterna, quindi
Dharanidhar,
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.