Условие в трубопроводе Jenkins по директиве триггеров - PullRequest
1 голос
/ 08 апреля 2020

У Дженкинса есть неплохая относительно полная документация о синтаксисе Jenkinsfile. Но я до сих пор не нашел там ответа, возможно ли сделать управление потоком на верхнем уровне конвейера? Буквально включить что-то if просто в pipeline {} раздел (декларативный), например:

pipeline {
    if (bla == foo) {
        triggers {
            ...configuration
        }
} 

или

pipeline {
    triggers {
        if (bla == foo) {
            something...
        }
    }
} 

triggers раздел - это раздел, который может быть включен только один раз и только в разделе pipeline. Но утверждение if должно применяться только на уровне стадии.

Кто-нибудь знает, как условно включить что-либо в директивы, например, triggers, или условно включить сами директивы?

1 Ответ

4 голосов
/ 08 апреля 2020

Вы не можете использовать управление потоком в конвейере за пределами when и script, но вы можете вызывать функции для таких вещей, как параметры триггера:

pipeline {
    agent any
    triggers{ cron( getCronParams() ) }
    ...
}

def getCronParams() {
    if( someCondition ) {
        return 'H */4 * * 1-5'
    }
    else {
        return 'H/30 */2 * * *'
    } 
}

Другой способ - создать ваш конвейер сценарий динамически, используя evaluate():

evaluate """
pipeline {
    agent any        
    ${getTriggers()}    
    ...
}
"""

String getTriggers() {
    if( someCondition ) {
        return "triggers{ cron('H */4 * * 1-5') }"
    }
    else {
        return "triggers{ pollSCM('H */4 * * 1-5') }"
    } 
}
...