Подтвердить что ты не робот

Задайте имя и описание сборки из декларативного трубопровода Дженкинса

Я хотел бы задать имя и описание сборки из декларативного трубопровода Jenkins, но не могу найти правильный способ сделать это. Я попытался использовать скобу среды после конвейера, используя скобу node в скобке агента и т.д. Я всегда получаю синтаксическую ошибку.

Последняя версия моего Jenkinsfile выглядит так:

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...'
        }
    }       
}

Ошибка:

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

В идеале я хотел бы прочитать MY_PROJECT и MY_VERSION_NUMBER из файла build.properties или из журнала сборки Jenkins. Любые указания относительно этого требования будут также оценены.

UPDATE

Основываясь на ответе, который я получил ниже, работало:

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']
        }
    }

Теперь версия сборки автоматически устанавливается во время конвейера, читая файл build.properties.

4b9b3361

Ответ 1

Я думаю, что это будет делать то, что вы хотите. Я смог сделать это внутри блока script:

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

script является своего рода выходным люком, чтобы выйти из декларативного конвейера. Вероятно, есть декларативный способ сделать это, но я не смог его найти. И еще одно замечание. Я думаю, что вы хотите currentBuild.displayName вместо currentBuild.name. В документации для глобальных переменных Jenkins я не видел свойства name в currentBuild.