Попытка установить глобальную переменную среды канала и сообщения в Jenkinsfile, но не уверен, какой из двух методов лучше

Попытка создать переменные SEND_SLACK_NOTIF, SLACK_CHANNEL и SLACK_MESSAGE и установить их как переменные среды глобально в файле Jenkins, но я не уверен, какой метод лучше в многоэтапном конвейере. Не обращайте внимания на отступ!

Способ 1:

 #!/usr/bin/groovy

    node('large') {

    withEnv(['SEND_SLACK_NOTIF=true',
            'SLACK_CHANNEL=UT24K22K1',
            "SLACK_MESSAGE=FAILURE: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'\nBetter fix it! (${env.BUILD_URL})"]){
        stage('Test') {
            if (env.SEND_SLACK_NOTIF) {
                slackSend channel: env.SLACK_CHANNEL, color: 'danger', message: env.SLACK_MESSAGE, tokenCredentialId: 'slack-integration-token'
            }
        }
    }
}

Способ 2:

 #!/usr/bin/groovy
    env.SEND_SLACK_NOTIF = true
    env.SLACK_CHANNEL = 'UT24K22K1'
    env.SLACK_MESSAGE = "FAILURE: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'\nBetter fix it! (${env.BUILD_URL})"

node('large') {

stage('Test') {
            if (env.SEND_SLACK_NOTIF) {
                slackSend channel: env.SLACK_CHANNEL, color: 'danger', message: env.SLACK_MESSAGE, tokenCredentialId: 'slack-integration-token'
            }
        }
    }

person babyYoda44    schedule 28.02.2020    source источник


Ответы (1)


Если вы просто рассмотрите два варианта, я бы выбрал вариант 1, потому что он более декларативен, чем вариант 2. Однако лучший способ — это тот, который описан в документация Jenkins:

pipeline {
    agent {
        ...
    }

    environment {
        SEND_SLACK_NOTIF = 'true'
        SLACK_CHANNEL = 'UT24K22K1'
    }

    stages {
        ...
    }
}

Вы также можете пересмотреть, какие переменные вам действительно нужны. Если вы используете их только один раз, не используйте переменную, а используйте значение напрямую.

person Hendrik M Halkow    schedule 29.02.2020