Не прерывать задание сборки, которое было запущено другим заданием сборки, которое было запущено вручную - PullRequest
0 голосов
/ 27 мая 2019

Исключить, чтобы прервать / остановить текущее задание на сборку (пример: задание B), которое было инициировано заданием (пример: задание A), где задание A было инициировано вручную.

Я могу получить подробную информацию о работе, независимо от того, запущена она вручную или нет, с помощью приведенного ниже кода.

def was_previous_build_triggered_manually() {
    for (cause in currentBuild?.rawBuild?.getPreviousBuild()?.getCauses()) {
        if (cause.getShortDescription() =~ 'Started by user') {
            return true
        }
    }
    return false
}

Так что мне просто нужно добавить какое-то условие - проверить, запущено ли задание другим заданием, которое было запущено вручную (поскольку у меня уже есть вышеуказанный код, чтобы проверить, запущено ли оно вручную или нет)

1 Ответ

0 голосов
/ 28 мая 2019

Мы используем общую библиотеку для оценки причин для нескольких различных условий. То же, что и у вас, проверка, вызвана ли его автоматическая сборка против пользователя (две разные причины могут означать, что пользователь вызван).

Одна функция для извлечения причин в хороший список.

Одна функция для оценки истинности / ложности при наличии соответствующих причин.

Простое условие if для ворот.

Наша общая библиотека в / vars jobCauses.groovy

    /**
     * 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()
    }

    /**
     * Checks if job causes contain Non-automated causes
     * Either
     *** Run by a User
    *** Rebuilt by a User
    *** Replayed by a User
    * Return true if  non automated cause found
    *
    * @return boolean
    */
    boolean hasNonAutomatedCauses() {

        List nonAutomatedCauses = ['UserIdCause', 'ReplayCause']

        List intersection = []
        intersection = nonAutomatedCauses.intersect(getCauses())
        // if no user triggered 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() }

    }

В нашем Jenkinsfile:

Boolean isHumanTriggered = jobCauses.hasNonAutomatedCauses()
if ( isHumanTriggered ) {
    //do the thing
} 
...