Использование содержимого с выражением Jenkins и env var - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь создать Jenkinsfile для обработки различных шагов в среде prod vs dev.Я пытался использовать шаблон anyOf с expression, который проверяет переменную окружения JOB_URL, чтобы определить, какой сборке сервер / инструкция по сборке следовать.

Jenkinsfile в конечном итоге ищетчто-то вроде следующего:

stage('In Prod') {
    when {
        allOf {
            expression { params.P1 == 'x' }
            expression { params.P2 == 'y' }
            expression { env.JOB_URL.contains('prod_server.com') }
        }
    }
    ...
}
stage('In Dev') {
    when {
        allOf {
            expression { params.P1 == 'x' }
            expression { params.P2 == 'y' }
            expression { env.JOB_URL.contains('dev_server.com') }
        }
    }
    ...
}

Ожидаемое поведение:

  • В Dev -> Run In Dev step
  • В Prod -> Run In Prod step

Фактическое поведение:

  • In Dev -> run In Prod AND In Dev step
  • In Prod -> run In Prod step

Да, я проверил, чтобы убедиться, что JOB_URL на dev не содержит prod_server.com.

Я также попытался !env.JOB_URL.contains('dev_server.com') в качестве дополнительного выражения дляшаг prod с тем же результатом.

Я знаю только достаточно groovy, чтобы пройти через Jenkins, и я немного новичок в синтаксисе конвейера Jenkins, так что, возможно, я неправильно понял поведение здесь, но из чегоЯ понимаю из документации Jenkins expression:

при возврате строк из ваших выражений, которые ониst может быть преобразовано в логическое значение или вернуть значение null, чтобы получить значение false.Простое возвращение «0» или «false» будет по-прежнему принимать значение «true».

И в качестве проверки работоспособности я подтвердил, что в документации groovy говорится, что contains должен возвращатьсяa boolean.

1 Ответ

0 голосов
/ 20 сентября 2018

Вы можете использовать компаратор регулярного выражения в выражении для проверки JOB_URL.Попробуйте что-то вроде этого:

pipeline {

    agent none

    parameters {
        string(name: 'P1', defaultValue: 'x', description: '')
        string(name: 'P2', defaultValue: 'y', description: '')
    }

    stages {

        stage('Init') {
            steps {
                echo "params = ${params.toString()}"
                echo "env.JOB_URL = ${env.JOB_URL}"
            }
        }
        stage('In Prod') {
            when {
                allOf {
                    expression { params.P1 == 'x' }
                    expression { params.P2 == 'y' }
                    expression { JOB_URL ==~ /.*prod_server.com.*/ }
                }
            }
            steps {
                echo "Prod"
            }
        }
        stage('In Dev') {
            when {
                allOf {
                    expression { params.P1 == 'x' }
                    expression { params.P2 == 'y' }
                    expression { JOB_URL ==~ /.*dev_server.com.*/ }
                }
            }

            steps {
                echo "DEV"
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...