43 votes

Définir le nom et la description de la construction à partir d'un pipeline déclaratif Jenkins

Je voudrais définir le nom et la description de la construction à partir d'un pipeline déclaratif Jenkins, mais je ne trouve pas la bonne façon de le faire. J'ai essayé d'utiliser un crochet d'environnement après le pipeline, d'utiliser un crochet de nœud dans un crochet d'agent, etc. J'obtiens toujours une erreur de syntaxe.

La dernière version de mon fichier Jenkins se présente comme suit :

pipeline {  
    stages {
        stage("Build") {
            steps {
                echo "Building application..."
                bat "%ANT_HOME%/bin/ant.bat clean compile"
                currentBuild.name = "MY_VERSION_NUMBER"
                currentBuild.description = "MY_PROJECT MY_VERSION_NUMBER"
            }
        }
        stage("Unit Tests") {
            steps {
                echo "Testing (JUnit)..."
            echo "Testing (pitest)..."
                bat "%ANT_HOME%/bin/ant.bat run-unit-tests"
            }
        }
        stage("Functional Test") {
            steps {
                echo "Selenium..."
            }
        }
        stage("Performance Test") {
            steps {
                echo "JMeter.."
            }
        }
        stage("Quality Analysis") {
            steps {
                echo "Running SonarQube..."
                bat "%ANT_HOME%/bin/ant.bat run-sonarqube-analysis"
            }
        }
        stage("Security Assessment") {
            steps {
                echo "ZAP..."
            }
        }
        stage("Approval") {
            steps {
            echo "Approval by a CS03"
            }
        }
        stage("Deploy") {
            steps {
                echo "Deploying..."
            }
        }
    }
    post {      
        always {
            junit '/test/reports/*.xml'
        }
        failure {
            emailext attachLog: true, body: '', compressLog: true, recipientProviders: [[$class: 'CulpritsRecipientProvider'], [$class: 'DevelopersRecipientProvider']], subject: '[JENKINS] MY_PROJECT build failed', to: '...recipients...'
        }
        success {
            emailext attachLog: false, body: '', compressLog: false, recipientProviders: [[$class: 'DevelopersRecipientProvider']], subject: '[JENKINS] MY_PROJECT build succeeded', to: '...recipients...'
        }
    }       
}

L'erreur est :

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 11: Expected a step @ line 11, column 5.
                currentBuild.name = "MY_VERSION_NUMBER"
       ^

WorkflowScript: 12: Expected a step @ line 12, column 5.
                currentBuild.description = "MY_PROJECT MY_VERSION_NUMBER"
       ^

Idéalement, j'aimerais pouvoir lire MY_PROJECT et MY_VERSION_NUMBER dans le fichier build.properties ou dans le journal de construction de Jenkins. Toute indication concernant cette exigence serait également appréciée.

UPDATE

Sur la base de la réponse que j'ai eue ci-dessous, ce qui suit a fonctionné :

stage("Build") {
    steps {
        echo "Building application..."
        bat "%ANT_HOME%/bin/ant.bat clean compile"

        script {
            def props = readProperties  file: 'build.properties'
            currentBuild.displayName = "v" + props['application.version']
        }
    }

Maintenant, la version de construction est automatiquement définie pendant le pipeline en lisant le fichier build.properties.

73voto

Mateo Points 58

Je pense que cela fera ce que vous voulez. J'ai pu le faire à l'intérieur d'un script bloc :

pipeline {
    stages {
        stage("Build"){
            steps {
                script {
                    currentBuild.displayName = "The name."
                    currentBuild.description = "The best description."
                }
                ... do whatever.
            }
        }
    }
}

Le script est une sorte d'échappatoire pour sortir d'un pipeline déclaratif. Il y a probablement un moyen déclaratif de le faire mais je ne l'ai pas trouvé. Et une autre remarque. Je pense que vous voulez currentBuild.displayName au lieu de currentBuild.name Dans la documentation des globaux de Jenkins, je n'ai pas vu de propriété de nom sous currentBuild.

0 votes

La manière déclarative serait d'écrire un script groovy pur dans un fichier externe ou une bibliothèque partagée et de l'appeler en tant qu'étape, éliminant ainsi le besoin d'un bloc script.

10voto

Carlos Andres Points 613

Si vous voulez donner un nom de construction à un travail à partir d'un paramètre, vous pouvez utiliser

currentBuild.displayName = "${nameOfYourParameter}" . Veillez à utiliser des guillemets doubles au lieu de guillemets simples. .

Configuration du travail

enter image description here

Construire un travail avec un paramètre

enter image description here

Historique de la construction

enter image description here

RÉFÉRENCE : Comment définir le nom de la construction dans une tâche Pipeline ?

2 votes

En outre, j'ai eu des problèmes avec ce système parce que j'utilisais des chaînes de caractères à guillemets simples (par exemple. '${NumeroCambio}' ). Apparemment, cela ne fonctionne qu'avec les chaînes de caractères à double guillemet.

1 votes

C'est un point que j'ai oublié. J'ai mis à jour la réponse. Merci, Colin !

0 votes

@CarlosAndres, une question : quel plugin utilisez-vous pour cette jolie boule verte et cette coche ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X