Как указать, когда ветвь НЕ (название ветки) в jenkinsfile?

Как я могу указать что-то вроде следующего в моем Jenkinsfile?

когда ветка не х

Я знаю, как определить конкретные задачи отрасли, такие как:

stage('Master Branch Tasks') {
        when {
            branch "master"
        }
        steps {
          sh '''#!/bin/bash -l
          Do some stuff here
          '''
        }
}

Однако я хотел бы указать этап, когда ветвь не является главной или промежуточной, как показано ниже:

stage('Example') {
    if (env.BRANCH_NAME != 'master' && env.BRANCH_NAME != 'staging') {
        echo 'This is not master or staging'
    } else {
        echo 'things and stuff'
    }
}

Однако вышеупомянутое не работает и терпит неудачу со следующими ошибками:

WorkflowScript: 62: Not a valid stage section definition: "if 

WorkflowScript: 62: Nothing to execute within stage "Example" 

Источник примечания для моей неудачной попытки: https://jenkins.io/doc/book/pipeline/syntax/

4 ответа

После устранения этой проблемы вы можете сделать следующее:

stage('Example (Not master)') {
   when {
       not {
           branch 'master'
       }
   }
   steps {
     sh 'do-non-master.sh'
   }
}

Вы также можете указать несколько условий (в данном случае имена веток), используя anyOf:

stage('Example (Not master nor staging)') {
   when {
       not {
          anyOf {
            branch 'master';
            branch 'staging'
          }
       }
   }
   steps {
     sh 'do-non-master-nor-staging.sh'
   }
}

В этом случае do-non-master-nor-staging.sh будет работать на всех ветвях, кроме главной и промежуточной.

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

Ссылка из вашего поста показывает пример со скриптовым конвейерным синтаксисом. Ваш код использует декларативный синтаксис конвейера. Для использования скриптового конвейера в декларативном режиме вы можете использовать шаг скрипта.

stage('Example') {
    steps {
        script { 
            if (env.BRANCH_NAME != 'master' && env.BRANCH_NAME != 'staging') {
                echo 'This is not master or staging'
            } else {
                echo 'things and stuff'
            }
        }
    }
}

Для тех, кто хочет использовать значения env, а также в случае декларативного конвейера и динамической выборки ветвей вы можете определить свои собственные переменные глобально и использовать, как показано ниже.[Переменная "deployBranch" должна быть объявлена ​​перед конвейером и обновлена ​​в файле этап от предыдущего к текущему этапу или перед использованием оценки ]

                  stage ('checkout-NonMaster') {
                when {
                    not {
                        environment(name: "deployBranch", value: "master")
                    }
                }
                steps {

                        <anything goes here like groovy code or shell commands>
                }
            }
Другие вопросы по тегам