Мы используем общую библиотеку для оценки причин для нескольких различных условий. То же, что и у вас, проверка, вызвана ли его автоматическая сборка против пользователя (две разные причины могут означать, что пользователь вызван).
Одна функция для извлечения причин в хороший список.
Одна функция для оценки истинности / ложности при наличии соответствующих причин.
Простое условие 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
}