Использование конвейера Jenkins без цепочки заданий - PullRequest
0 голосов
/ 25 апреля 2019

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

Я хочу запланированную сборку и хочу, чтобы эти задания были связаны.

При запуске вручную, не запускать задания в каскадном режиме.

Я не хочу нажимать «настроить», удалить нисходящий прогон и повторно добавить нисходящий поток в случае выполнения вручную.

Каково лучшее решение для этого?

Заранее спасибо.

1 Ответ

1 голос
/ 26 апреля 2019

Так что это можно сделать, однако я рекомендую поместить функции, которые я описал ниже, в общую библиотеку Jenkins.Выполнение этого способа приведет к получению как минимум 4 утверждений безопасности песочницы, что потребует вашего администратора jenkins.1 из которых предупреждает, что это уязвимость системы безопасности ... поэтому оцените воздействие на вашу среду и свой профиль риска.

#!groovy

List jobparameters = [
        booleanParam(name: 'CHECKBOX', defaultValue: true, description: 'Tick a checkbox'),
        string(name: 'STRING', defaultValue: 'stringhere', description: 'Enter a string')
    ]

properties([
    pipelineTriggers([cron('''TZ=Australia/Victoria
            H 1 * * *''')]),
    buildDiscarder(logRotator(numToKeepStr: '20')),
    parameters(jobparameters),
])


stage('Stage') {
    node {
        // do something always
        echo(params.STRING)
    }
}
if ( hasAutomatedCauses() ) {
    stage('folder1/reponame/branch') {
        //do something conditionally
        build(job: "folder1/reponame/branch", parameters: jobparameters, propagate: true)
    }
} else {
    stage('folder1/reponame/branch') {
        node {
            echo("Not running downstream job")
        }
    }
}

/**
 * Checks if job causes contain automated causes
 * Return true if automated cause found
 *
 * @return boolean
 */
boolean hasAutomatedCauses() {

    List automatedCauses = ['UpstreamCause', 'TimerTriggerCause']

    List intersection = []
    intersection = automatedCauses.intersect(getCauses())

    // if no automated causes are found means intersection is empty and then return false
    return !intersection.isEmpty()
}

/**
 * Retrieves list of causes that generated job execution
 *
 * @return list
 */
List getCauses() {

    return currentBuild.rawBuild.getCauses().collect { it.getClass().getCanonicalName().tokenize('.').last() }

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