Как передать пользовательские значения env в тело электронной почты на этапе публикации в конвейере jenkins?

Ниже приведен мой сценарий для конвейера jenkins, где я меняю одно из значений env на одном из этапов и использую эти пользовательские env в теле сообщения электронной почты.

pipeline {
    agent none
    environment {
                ENV_STAGE = 'dev'
                UNTTST_SNRSCN = 'false'
                SNRSCN_OUTPUT = ''  
                BRANCHNAME = 'development'
                EMAIL_RECIPIENTS = '[email protected]'    
                }

    stages {
        stage("Sonar-api"){
            when{
                    expression { params.UNTTST_SNRSCN == 'true' }
                }
                        agent{ label "worker" }
                        stages{
                            stage('SonarQube analysis') {
                                steps {
                                    script {
                                        scannerHome = tool 'sonar-scanner';
                                    }

                                    withSonarQubeEnv('sonarqube9000') { 
                                        git branch: '${BRANCHNAME}', credentialsId: '', url: ''
                                        dir ("$WORKSPACE/api/") {
                                        sh "npm install && npm install -D typescript"
                                        sh "npm run test"
                                        sh """/opt/sonar-scanner/bin/sonar-scanner"""
                                        sh "sleep 20"
                                        }
                                    }
                                }
                            }
                        stage ("Clearing Workspace"){
                                steps{
                                    cleanWs()
                                }   
                            }
                        }
                    }

        stage("Build and deploy"){
                        agent{ label 'worker' }

                        stages {

                                stage("Checkout Sourcecode") {
                                steps{
                                    git branch: "${BRANCHNAME}", credentialsId: '', url: ''
                                                                    }
                                }
                                stage ("Set scan output"){
                                        steps {
                                            script {
                                                if (env.UNTTST_SNRSCN == 'true') {
                                                def SNRSCN_OUTPUT = 'Unit test and sonar scanning performed.'
                                                sh "echo $SNRSCN_OUTPUT"
                                                } else if (env.UNTTST_SNRSCN == 'false') {
                                                def SNRSCN_OUTPUT = 'Unit test and sonar scanning not performed.'
                                                sh "echo $SNRSCN_OUTPUT"
                                                }
                                            }
                                        }
                                }

                                stage ("Clearing Workspace"){
                                steps{
                                    cleanWs()
                                }   
                                }
                              }                     
                            }
                            }

   post {
    failure {
        emailext body: """Hi,
Env stage ${env.ENV_STAGE} deployment failed. Please check jenkins error logs and redeploy.
${env.SNRSCN_OUTPUT}

Regards,
DT""", subject: "Deployment #${BUILD_NUMBER} - ${currentBuild.currentResult}", to: "${env.EMAIL_RECIPIENTS}"
    }
}                       
}

Я ожидаю значение SNRSCN_OUTPUT в электронной почте, но я продолжаю получать его как нулевое. Как мне этого добиться? я хочу, чтобы новое значение SNRSCN_OUTPUT из этапа «Установить вывод сканирования» отображалось в электронной почте. Цените ваш ценный вклад.

Subject: Deployment #26 - FAILURE

Hi,
Env stage dev deployment failed. Please check jenkins error logs and redeploy.
null

Regards,
DT

person justin xa    schedule 04.06.2020    source источник


Ответы (2)


Когда сборка этапа завершена, значения переменных назначения не передаются действию после сборки. В качестве решения вы можете передать необходимые значения в файл, а затем с помощью плагина Environment Inject Plugin вы можете получить доступ к значению в действии публикации. Конфигурации задания Environment Inject Plugin. настройка плагина

pipeline {
    agent any
    environment {
                ENV_STAGE = 'dev'
                UNTTST_SNRSCN = 'false'
                SNRSCN_OUTPUT = ''  
                BRANCHNAME = 'development'
                EMAIL_RECIPIENTS = '[email protected]'    
                }

    stages {
        stage ("Set scan output"){
           steps {
                script {
                    if (env.UNTTST_SNRSCN == 'true') {
                       def SNRSCN_OUTPUT = 'Unit test and sonar scanning performed.'
                       sh "echo $SNRSCN_OUTPUT"
                       writeFile file: 'result.txt', text: SNRSCN_OUTPUT
                    } else if (env.UNTTST_SNRSCN == 'false') {
                        def SNRSCN_OUTPUT = 'Unit test and sonar scanning not performed.'
                        sh "echo $SNRSCN_OUTPUT"
                        writeFile file: 'result.txt', text: SNRSCN_OUTPUT
                    }

                }
            }
        }
    }

   post {
       always{
        script {
            def readContent = readFile 'result.txt'
            echo "The result is ${readContent}"    
       }
     }
   }
}
person RidmiR    schedule 04.06.2020

Вы можете внести следующие изменения в сценарий, чтобы передать пользовательские значения env в тело электронной почты на этапе публикации в конвейере jenkins:

Изменение на этапе: установка результатов сканирования

stage ("Set scan output"){
                                    steps {
                                        script {
                                            if (env.UNTTST_SNRSCN == 'true') {
                                            def SNRSCN_OUTPUT = 'Unit test and sonar scanning performed.'
                                            sh "echo $SNRSCN_OUTPUT"
                                            env.SNRSCN_OUTPUT = SNRSCN_OUTPUT
                                            } else if (env.UNTTST_SNRSCN == 'false') {
                                            def SNRSCN_OUTPUT = 'Unit test and sonar scanning not performed.'
                                            sh "echo $SNRSCN_OUTPUT"
                                            env.SNRSCN_OUTPUT = SNRSCN_OUTPUT
                                            }
                                        }
                                    }
                            }

Не вносите никаких изменений на этапе после сборки.

Возможно, это решит вашу проблему.

person Sourav Atta    schedule 08.06.2020