Jenkins Groovy snippets: различия между версиями
Материал из noname.com.ua
Перейти к навигацииПерейти к поискуSirmax (обсуждение | вклад) |
Sirmax (обсуждение | вклад) |
||
(не показано 11 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
+ | [[Категория:Jenkins]] |
||
− | =Upstream Job (вызвовшая текущую)= |
||
+ | [[Категория:CICD]] |
||
+ | [[Категория:Groovy]] |
||
+ | [[Категория:GroovyDSL]] |
||
+ | |||
+ | =Upstream Job (вызвовшая текущую), частный случай= |
||
<PRE> |
<PRE> |
||
node() { |
node() { |
||
Строка 91: | Строка 96: | ||
println("=====") |
println("=====") |
||
} |
} |
||
+ | </PRE> |
||
+ | |||
+ | =Получение Upstream Job и причины вызоыв билда (не безопасен и вызывает ошибки сериализации в неопределеных случаях)= |
||
+ | |||
+ | <PRE> |
||
+ | @NonCPS |
||
+ | def findBuildCause(build) { |
||
+ | def causes = [] |
||
+ | //Check if the build was triggered by some jenkins project(job) |
||
+ | upstreamcause = build.getCause(hudson.model.Cause.UpstreamCause.class) |
||
+ | //println("upstreamcause") |
||
+ | if (upstreamcause != null) { |
||
+ | job = Jenkins.getInstance().getItemByFullName(upstreamcause.getUpstreamProject(), hudson.model.Job.class) |
||
+ | //println("job") |
||
+ | //println(job) |
||
+ | if (job != null) { |
||
+ | upstream = job.getBuildByNumber(upstreamcause.getUpstreamBuild()) |
||
+ | if (upstream != null) { |
||
+ | //return upstream |
||
+ | causes.add(upstream) |
||
+ | } |
||
+ | } |
||
+ | } |
||
+ | //Check if the build was triggered by SCM change |
||
+ | scmCause = build.getCause(hudson.triggers.SCMTrigger.SCMTriggerCause) |
||
+ | //println("scmCause") |
||
+ | //println(scmCause) |
||
+ | if (scmCause != null) { |
||
+ | //return scmCause.getShortDescription() |
||
+ | causes.add(upstream) |
||
+ | } |
||
+ | |||
+ | //Check if the build was triggered by timer |
||
+ | timerCause = build.getCause(hudson.triggers.TimerTrigger.TimerTriggerCause) |
||
+ | //println("timerCause") |
||
+ | //println(timerCause) |
||
+ | |||
+ | if (timerCause != null) { |
||
+ | //return timerCause.getShortDescription() |
||
+ | causes.add(imerCause) |
||
+ | } |
||
+ | //Check if the build was triggered by some jenkins user |
||
+ | usercause = build.getCause(hudson.model.Cause.UserIdCause.class) |
||
+ | //println("usercause") |
||
+ | //println(usercause) |
||
+ | if (usercause != null) { |
||
+ | //return usercause.getUserId() |
||
+ | causes.add(usercause) |
||
+ | } |
||
+ | return causes |
||
+ | } |
||
+ | |||
+ | def build_description = "" |
||
+ | build_causes.each { build_cause -> |
||
+ | println("BUILD_CAUSE") |
||
+ | println(build_cause) |
||
+ | println("CLASS " + build_cause.getClass()) |
||
+ | println("CLASS_NAME:" + build_cause.getClass().getName()) |
||
+ | if ( build_cause instanceof org.jenkinsci.plugins.workflow.job.WorkflowRun ) { |
||
+ | build_description = "Build Caused by: \n" + "Build Name: " + build_cause.getFullDisplayName() + "Build Number " + build_cause.getNumber() + "\n" |
||
+ | } |
||
+ | |||
+ | if ( build_cause instanceof hudson.model.Cause$UserIdCause ) { |
||
+ | build_description = build_description + "User: " + build_cause.getUserName() + "(" + build_cause.getUserId() + ")\n" |
||
+ | } |
||
+ | |||
+ | } |
||
+ | |||
+ | currentBuild.description = build_description |
||
+ | |||
+ | </PRE> |
||
+ | =Получение Upstream Job и причины вызоыв билда (предположительно более безопастный)= |
||
+ | <PRE> |
||
+ | @NonCPS |
||
+ | def setBuildDescription() { |
||
+ | |||
+ | def build_description = "" |
||
+ | def causes = [] |
||
+ | def cuse |
||
+ | |||
+ | //println("upstreamcause") |
||
+ | if (currentBuild.getRawBuild().getCause(hudson.model.Cause.UpstreamCause.class) != null) { |
||
+ | if (Jenkins.getInstance().getItemByFullName(currentBuild.getRawBuild().getCause(hudson.model.Cause.UpstreamCause.class).getUpstreamProject(), hudson.model.Job.class) != null) { |
||
+ | if (Jenkins.getInstance().getItemByFullName(currentBuild.getRawBuild().getCause(hudson.model.Cause.UpstreamCause.class).getUpstreamProject(), hudson.model.Job.class).getBuildByNumber(currentBuild.getRawBuild().getCause(hudson.model.Cause.UpstreamCause.class).getUpstreamBuild()) != null) { |
||
+ | //return upstream |
||
+ | causes.add(Jenkins.getInstance().getItemByFullName(currentBuild.getRawBuild().getCause(hudson.model.Cause.UpstreamCause.class).getUpstreamProject(), hudson.model.Job.class).getBuildByNumber(currentBuild.getRawBuild().getCause(hudson.model.Cause.UpstreamCause.class).getUpstreamBuild())) |
||
+ | } |
||
+ | } |
||
+ | } |
||
+ | |||
+ | if (currentBuild.getRawBuild().getCause(hudson.triggers.SCMTrigger.SCMTriggerCause) != null) { |
||
+ | causes.add(currentBuild.getRawBuild().getCause(hudson.triggers.SCMTrigger.SCMTriggerCause)) |
||
+ | } |
||
+ | |||
+ | if (currentBuild.getRawBuild().getCause(hudson.triggers.TimerTrigger.TimerTriggerCause) != null) { |
||
+ | causes.add(currentBuild.getRawBuild().getCause(hudson.triggers.TimerTrigger.TimerTriggerCause)) |
||
+ | } |
||
+ | |||
+ | if (currentBuild.getRawBuild().getCause(hudson.model.Cause.UserIdCause.class) != null) { |
||
+ | causes.add(currentBuild.getRawBuild().getCause(hudson.model.Cause.UserIdCause.class)) |
||
+ | } |
||
+ | if (causes instanceof Serializable ) { |
||
+ | println(causes + " is Serializable") |
||
+ | } |
||
+ | |||
+ | for (i=0; i<causes.size(); i++) { |
||
+ | def index = i |
||
+ | def build_cause=causes[index] |
||
+ | println("BUILD_CAUSE") |
||
+ | println(build_cause) |
||
+ | println("CLASS " + build_cause.getClass()) |
||
+ | println("CLASS_NAME:" + build_cause.getClass().getName()) |
||
+ | if ( build_cause instanceof org.jenkinsci.plugins.workflow.job.WorkflowRun ) { |
||
+ | build_description = "Build Caused by: \n" + "Build Name: " + build_cause.getFullDisplayName() + "Build Number " + build_cause.getNumber() + "\n" |
||
+ | } |
||
+ | |||
+ | if ( build_cause instanceof hudson.model.Cause$UserIdCause ) { |
||
+ | build_description = build_description + "User: " + build_cause.getUserName() + "(" + build_cause.getUserId() + ")\n" |
||
+ | } |
||
+ | if ( build_cause instanceof hudson.triggers.TimerTrigger.TimerTriggerCause ) { |
||
+ | build_description = "Triggered by timer: " + build_cause.getShortDescription() |
||
+ | } |
||
+ | } |
||
+ | currentBuild.description = build_description |
||
+ | } |
||
+ | </PRE> |
||
+ | =Получение списка нод по лейблу= |
||
+ | <PRE> |
||
+ | @NonCPS |
||
+ | def hostNames(label) { |
||
+ | def nodes = [] |
||
+ | jenkins.model.Jenkins.instance.computers.each { c -> |
||
+ | if (c.node.labelString.contains(label)) { |
||
+ | nodes.add(c.node.selfLabel.name) |
||
+ | } |
||
+ | } |
||
+ | return nodes |
||
+ | } |
||
+ | </PRE> |
||
+ | |||
+ | =Параллельный запуск= |
||
+ | <PRE> |
||
+ | def parallelTasks = [:] |
||
+ | def slaveNodes= hostNames('lable') |
||
+ | def housekeeperJobName = "job to run" |
||
+ | |||
+ | setBuildDescription() |
||
+ | |||
+ | for (i=0; i<slaveNodes.size(); i++) { |
||
+ | def index = i |
||
+ | println(slaveNodes[index]) |
||
+ | parallelTasks[slaveNodes[index]] = { |
||
+ | build( |
||
+ | job: housekeeperJobName, |
||
+ | parameters: [ |
||
+ | [ |
||
+ | $class: 'StringParameterValue', name: 'SLAVE_NAME', value: slaveNodes[index] |
||
+ | ]] |
||
+ | ) |
||
+ | } |
||
+ | } |
||
+ | |||
+ | parallel parallelTasks |
||
+ | </PRE> |
||
+ | |||
+ | |||
+ | |||
+ | =Получение причины билда рекурсивно до изначальной причины запуска= |
||
+ | <PRE> |
||
+ | |||
+ | |||
+ | |||
+ | DOWNSTREAM_JOB="020-kilda-experemental-jobs/99-test-downstream-job-2" |
||
+ | CLUSTER="TEST" |
||
+ | RELEASE_DATA="RELEASE_DATA" |
||
+ | |||
+ | |||
+ | node('master') { |
||
+ | println(getBuildUser()) |
||
+ | build( |
||
+ | job: DOWNSTREAM_JOB, |
||
+ | parameters: [ |
||
+ | // ChoiceParameterValue |
||
+ | [$class: 'StringParameterValue', name: 'CLUSTER', value: CLUSTER], |
||
+ | [$class: 'StringParameterValue', name: 'RELEASE_DATA', value: RELEASE_DATA], |
||
+ | ], propagate: true |
||
+ | ) |
||
+ | } |
||
+ | |||
+ | |||
+ | |||
+ | @NonCPS |
||
+ | def getUpstreamJob(def build) { |
||
+ | println("build") |
||
+ | println(build) |
||
+ | println(build.getClass().getName()) |
||
+ | def upstream_cause = build.getCause(hudson.model.Cause$UpstreamCause) |
||
+ | println("upstream_cause") |
||
+ | println(upstream_cause) |
||
+ | println(upstream_cause.getClass().getName()) |
||
+ | println("---------------------------------") |
||
+ | |||
+ | if ( upstream_cause != null ) { |
||
+ | def wokrflow_job = Jenkins.getInstance().getItemByFullName(upstream_cause.getUpstreamProject(), hudson.model.Job.class) |
||
+ | def workflow_run = wokrflow_job.getBuildByNumber(upstream_cause.getUpstreamBuild()) |
||
+ | println("wokrflow_job") |
||
+ | println(wokrflow_job) |
||
+ | println(wokrflow_job.getClass().getName()) |
||
+ | println("---------------------------------") |
||
+ | println("workflow_run") |
||
+ | println(workflow_run) |
||
+ | println(workflow_run.getClass().getName()) |
||
+ | println("---------------------------------") |
||
+ | println("") |
||
+ | return getUpstreamJob(workflow_run) |
||
+ | } else { |
||
+ | return build |
||
+ | } |
||
+ | } |
||
+ | |||
+ | @NonCPS |
||
+ | def getCasue(def workflow_run) { |
||
+ | try { |
||
+ | def user_cause = workflow_run.getCause(Cause.UserIdCause) |
||
+ | println("user_cause") |
||
+ | println(user_cause.getClass().getName()) |
||
+ | if (user_cause != null) { |
||
+ | return user_cause |
||
+ | } |
||
+ | } catch(Err) { |
||
+ | println("Failed to get UserIdCause") |
||
+ | println(Err) |
||
+ | } |
||
+ | |||
+ | try { |
||
+ | def time_trigger_cause = workflow_run.getCause(hudson.triggers.TimerTrigger.TimerTriggerCause) |
||
+ | println("time_trigger_cause") |
||
+ | println(time_trigger_cause.getClass().getName()) |
||
+ | if (time_trigger_cause != null) { |
||
+ | return time_trigger_cause |
||
+ | } |
||
+ | } catch(Err) { |
||
+ | println("Failed to get hudson.triggers.TimerTrigger.TimerTriggerCause") |
||
+ | println(Err) |
||
+ | } |
||
+ | |||
+ | try { |
||
+ | def scm_trigger_cause = workflow_run.getCause(hudson.triggers.SCMTrigger.SCMTriggerCause) |
||
+ | println("scm_trigger_cause") |
||
+ | println(scm_trigger_cause.getClass().getName()) |
||
+ | if (scm_trigger_cause != null) { |
||
+ | return scm_trigger_cause |
||
+ | } |
||
+ | |||
+ | } catch(Err) { |
||
+ | println("Failed to get hudson.triggers.SCMTrigger.SCMTriggerCause") |
||
+ | println(Err) |
||
+ | } |
||
+ | |||
+ | throw new Exception("Can't build cause") |
||
+ | } |
||
+ | |||
+ | @NonCPS |
||
+ | def getBuildUser() { |
||
+ | def upstream = getUpstreamJob(currentBuild.rawBuild) |
||
+ | println("upstream") |
||
+ | println(upstream) |
||
+ | println(upstream.getClass().getName()) |
||
+ | println("---------------------------------") |
||
+ | def cause = getCasue(upstream) |
||
+ | println("cause") |
||
+ | println(cause) |
||
+ | println(cause.getClass().getName()) |
||
+ | println("---------------------------------") |
||
+ | if ( cause instanceof hudson.model.Cause$UserIdCause ) { |
||
+ | return cause.getUserName().toString() |
||
+ | } else if ( cause instanceof hudson.triggers.TimerTrigger$TimerTriggerCause ) { |
||
+ | return "TRIGGERED_BY_TIMER_TRIGGER" |
||
+ | } else { |
||
+ | throw new Exception("Can't find user") |
||
+ | } |
||
+ | return "TESTING" |
||
+ | } |
||
+ | |||
</PRE> |
</PRE> |
Текущая версия на 10:41, 28 апреля 2022
Upstream Job (вызвовшая текущую), частный случай
node() { stage('downstream') { def upstream = currentBuild.rawBuild.getCause(hudson.model.Cause$UpstreamCause) echo upstream?.shortDescription } }
Получение тектовых параметров от билда (например в downstream job что бы не передавать их
import hudson.model.* import hudson.maven.* import hudson.tasks.* import jenkins.model.Jenkins import hudson.maven.reporters.* import hudson.plugins.emailext.* def job_name = "some-existing-job-name" def build_number = 12345 // existing build def getParametersFromBuild(jobName, buildNumber, parameterType) { // Parameter type is class, possible values are // StringParameterValue // TextParameterValue def job_parameters = [:] // Get Job class by fullName //println(jobName) def job_instance = Jenkins.getInstance().getItemByFullName(jobName, hudson.model.Job.class) //println("job: " + job_instance + "\n") //println(job_instance.getClass().getName()) // Get build instance using build number // build nummbaer can be obtained from upstream job job_build_instance = job_instance.getBuildByNumber(buildNumber) //println("build_instance:" + job_build_instance) //println(job_build_instance.getAllActions().getClass().getName()) job_all_build_instance_parameters_action = job_build_instance.getAllActions().findAll{ it instanceof ParametersAction } //println("job_all_build_instance_parameter_actions: " + job_all_build_instance_parameters_action) //println(job_all_build_instance_parameters_action.getClass().getName()) //job_build_instance_parameters_action is list of classes job_all_build_instance_parameters_action.each { parameters_action -> //println("parameters_action: " + parameters_action) //println(parameters_action.getClass().getName()) // Get all parameters from ParametersAction all_parameters = parameters_action.getAllParameters() // list all parameters //all_parameters.each { generic_parameter -> //println(generic_parameter) //println(generic_parameter.getClass()) //println(generic_parameter.getClass().getName()) //} if (parameterType == "string") { all_parameters.findAll{ it instanceof hudson.model.StringParameterValue }.each { string_parameter -> //println("string_parameter: " + string_parameter) //println(string_parameter) //println(string_parameter.toString()) //str = string_parameter.toString() //println(str) string_parameter_name = string_parameter.getName() string_parameter_value = string_parameter.getValue() job_parameters[string_parameter_name] = string_parameter_value //println(string_parameter.getDefinition()) //println("------------------") } } else if (parameterType == "text") { all_parameters.findAll{ it instanceof hudson.model.TextParameterValue }.each { text_parameter -> // Not implemented println("text_parameter: " + text_parameter) println(text_parameter) } } else { return [:] } } return job_parameters } upstream_job_text_parameters = getParametersFromBuild(job_name, build_number, "string") println(upstream_job_text_parameters) upstream_job_text_parameters.each { k, v -> println("=====") println("KEY= " + k) println("VALUE= " + v) println("=====") }
Получение Upstream Job и причины вызоыв билда (не безопасен и вызывает ошибки сериализации в неопределеных случаях)
@NonCPS def findBuildCause(build) { def causes = [] //Check if the build was triggered by some jenkins project(job) upstreamcause = build.getCause(hudson.model.Cause.UpstreamCause.class) //println("upstreamcause") if (upstreamcause != null) { job = Jenkins.getInstance().getItemByFullName(upstreamcause.getUpstreamProject(), hudson.model.Job.class) //println("job") //println(job) if (job != null) { upstream = job.getBuildByNumber(upstreamcause.getUpstreamBuild()) if (upstream != null) { //return upstream causes.add(upstream) } } } //Check if the build was triggered by SCM change scmCause = build.getCause(hudson.triggers.SCMTrigger.SCMTriggerCause) //println("scmCause") //println(scmCause) if (scmCause != null) { //return scmCause.getShortDescription() causes.add(upstream) } //Check if the build was triggered by timer timerCause = build.getCause(hudson.triggers.TimerTrigger.TimerTriggerCause) //println("timerCause") //println(timerCause) if (timerCause != null) { //return timerCause.getShortDescription() causes.add(imerCause) } //Check if the build was triggered by some jenkins user usercause = build.getCause(hudson.model.Cause.UserIdCause.class) //println("usercause") //println(usercause) if (usercause != null) { //return usercause.getUserId() causes.add(usercause) } return causes } def build_description = "" build_causes.each { build_cause -> println("BUILD_CAUSE") println(build_cause) println("CLASS " + build_cause.getClass()) println("CLASS_NAME:" + build_cause.getClass().getName()) if ( build_cause instanceof org.jenkinsci.plugins.workflow.job.WorkflowRun ) { build_description = "Build Caused by: \n" + "Build Name: " + build_cause.getFullDisplayName() + "Build Number " + build_cause.getNumber() + "\n" } if ( build_cause instanceof hudson.model.Cause$UserIdCause ) { build_description = build_description + "User: " + build_cause.getUserName() + "(" + build_cause.getUserId() + ")\n" } } currentBuild.description = build_description
Получение Upstream Job и причины вызоыв билда (предположительно более безопастный)
@NonCPS def setBuildDescription() { def build_description = "" def causes = [] def cuse //println("upstreamcause") if (currentBuild.getRawBuild().getCause(hudson.model.Cause.UpstreamCause.class) != null) { if (Jenkins.getInstance().getItemByFullName(currentBuild.getRawBuild().getCause(hudson.model.Cause.UpstreamCause.class).getUpstreamProject(), hudson.model.Job.class) != null) { if (Jenkins.getInstance().getItemByFullName(currentBuild.getRawBuild().getCause(hudson.model.Cause.UpstreamCause.class).getUpstreamProject(), hudson.model.Job.class).getBuildByNumber(currentBuild.getRawBuild().getCause(hudson.model.Cause.UpstreamCause.class).getUpstreamBuild()) != null) { //return upstream causes.add(Jenkins.getInstance().getItemByFullName(currentBuild.getRawBuild().getCause(hudson.model.Cause.UpstreamCause.class).getUpstreamProject(), hudson.model.Job.class).getBuildByNumber(currentBuild.getRawBuild().getCause(hudson.model.Cause.UpstreamCause.class).getUpstreamBuild())) } } } if (currentBuild.getRawBuild().getCause(hudson.triggers.SCMTrigger.SCMTriggerCause) != null) { causes.add(currentBuild.getRawBuild().getCause(hudson.triggers.SCMTrigger.SCMTriggerCause)) } if (currentBuild.getRawBuild().getCause(hudson.triggers.TimerTrigger.TimerTriggerCause) != null) { causes.add(currentBuild.getRawBuild().getCause(hudson.triggers.TimerTrigger.TimerTriggerCause)) } if (currentBuild.getRawBuild().getCause(hudson.model.Cause.UserIdCause.class) != null) { causes.add(currentBuild.getRawBuild().getCause(hudson.model.Cause.UserIdCause.class)) } if (causes instanceof Serializable ) { println(causes + " is Serializable") } for (i=0; i<causes.size(); i++) { def index = i def build_cause=causes[index] println("BUILD_CAUSE") println(build_cause) println("CLASS " + build_cause.getClass()) println("CLASS_NAME:" + build_cause.getClass().getName()) if ( build_cause instanceof org.jenkinsci.plugins.workflow.job.WorkflowRun ) { build_description = "Build Caused by: \n" + "Build Name: " + build_cause.getFullDisplayName() + "Build Number " + build_cause.getNumber() + "\n" } if ( build_cause instanceof hudson.model.Cause$UserIdCause ) { build_description = build_description + "User: " + build_cause.getUserName() + "(" + build_cause.getUserId() + ")\n" } if ( build_cause instanceof hudson.triggers.TimerTrigger.TimerTriggerCause ) { build_description = "Triggered by timer: " + build_cause.getShortDescription() } } currentBuild.description = build_description }
Получение списка нод по лейблу
@NonCPS def hostNames(label) { def nodes = [] jenkins.model.Jenkins.instance.computers.each { c -> if (c.node.labelString.contains(label)) { nodes.add(c.node.selfLabel.name) } } return nodes }
Параллельный запуск
def parallelTasks = [:] def slaveNodes= hostNames('lable') def housekeeperJobName = "job to run" setBuildDescription() for (i=0; i<slaveNodes.size(); i++) { def index = i println(slaveNodes[index]) parallelTasks[slaveNodes[index]] = { build( job: housekeeperJobName, parameters: [ [ $class: 'StringParameterValue', name: 'SLAVE_NAME', value: slaveNodes[index] ]] ) } } parallel parallelTasks
Получение причины билда рекурсивно до изначальной причины запуска
DOWNSTREAM_JOB="020-kilda-experemental-jobs/99-test-downstream-job-2" CLUSTER="TEST" RELEASE_DATA="RELEASE_DATA" node('master') { println(getBuildUser()) build( job: DOWNSTREAM_JOB, parameters: [ // ChoiceParameterValue [$class: 'StringParameterValue', name: 'CLUSTER', value: CLUSTER], [$class: 'StringParameterValue', name: 'RELEASE_DATA', value: RELEASE_DATA], ], propagate: true ) } @NonCPS def getUpstreamJob(def build) { println("build") println(build) println(build.getClass().getName()) def upstream_cause = build.getCause(hudson.model.Cause$UpstreamCause) println("upstream_cause") println(upstream_cause) println(upstream_cause.getClass().getName()) println("---------------------------------") if ( upstream_cause != null ) { def wokrflow_job = Jenkins.getInstance().getItemByFullName(upstream_cause.getUpstreamProject(), hudson.model.Job.class) def workflow_run = wokrflow_job.getBuildByNumber(upstream_cause.getUpstreamBuild()) println("wokrflow_job") println(wokrflow_job) println(wokrflow_job.getClass().getName()) println("---------------------------------") println("workflow_run") println(workflow_run) println(workflow_run.getClass().getName()) println("---------------------------------") println("") return getUpstreamJob(workflow_run) } else { return build } } @NonCPS def getCasue(def workflow_run) { try { def user_cause = workflow_run.getCause(Cause.UserIdCause) println("user_cause") println(user_cause.getClass().getName()) if (user_cause != null) { return user_cause } } catch(Err) { println("Failed to get UserIdCause") println(Err) } try { def time_trigger_cause = workflow_run.getCause(hudson.triggers.TimerTrigger.TimerTriggerCause) println("time_trigger_cause") println(time_trigger_cause.getClass().getName()) if (time_trigger_cause != null) { return time_trigger_cause } } catch(Err) { println("Failed to get hudson.triggers.TimerTrigger.TimerTriggerCause") println(Err) } try { def scm_trigger_cause = workflow_run.getCause(hudson.triggers.SCMTrigger.SCMTriggerCause) println("scm_trigger_cause") println(scm_trigger_cause.getClass().getName()) if (scm_trigger_cause != null) { return scm_trigger_cause } } catch(Err) { println("Failed to get hudson.triggers.SCMTrigger.SCMTriggerCause") println(Err) } throw new Exception("Can't build cause") } @NonCPS def getBuildUser() { def upstream = getUpstreamJob(currentBuild.rawBuild) println("upstream") println(upstream) println(upstream.getClass().getName()) println("---------------------------------") def cause = getCasue(upstream) println("cause") println(cause) println(cause.getClass().getName()) println("---------------------------------") if ( cause instanceof hudson.model.Cause$UserIdCause ) { return cause.getUserName().toString() } else if ( cause instanceof hudson.triggers.TimerTrigger$TimerTriggerCause ) { return "TRIGGERED_BY_TIMER_TRIGGER" } else { throw new Exception("Can't find user") } return "TESTING" }