Если я использую следующий конвейер Jenkins в Definition : Pipeline script from SCM
или Definition: Script, [*]Use Groovy Sandbox
, я получаю сгенерированное исключение.
Pipeline
import java.util.GregorianCalendar;
import java.util.Calendar;
pipeline {
agent { label 'STUBS_ONLY'}//agent any
stages {
stage('Query Jenkins Jobs') {
steps {
script {
// Get date seven days ago from today
def gcalNeg7Days = new GregorianCalendar();
gcalNeg7Days.add( Calendar.DAY_OF_MONTH , -7 );
def time7DaysAgo = gcalNeg7Days.getTime()
def getJobStats = { job ->
def lb = job.getLastBuild()
if (lb) {
// Calculate how many jobs ran in the last 7 days
def numRuns = job._getRuns().values().stream().filter( { run -> ( run.timestamp.getTime() > time7DaysAgo ) } ).count()
} else {
numRuns = 0
}
println ' ' + job.name + ' has ' + numRuns.toString() + ' ran last week'
}
// Get all builds from all views we explicitly track
def trackedViews = Jenkins.instance.views.findAll( { it.name != 'all' } );
// Print detail for each job
trackedViews.each {
view ->
println "--------------------------------------------------------------------------------------------------------------------------------------------"
println "${view.name}"
view.items.each {
item -> getJobStats( item )
}
}
}
} // steps
} // stage
} // stages
} // pipeline
Исключение
hudson.remoting.ProxyException: groovy.lang.MissingMethodException:
No signature of method: java.util.stream.ReferencePipeline$Head.filter()
is applicable for argument types:
(org.jenkinsci.plugins.workflow.cps.CpsClosure2) values: [org.jenkinsci.plugins.workflow.cps.CpsClosure2@4f819ba0]
Possible solutions: filter(java.util.function.Predicate), sorted(), find(), sorted(java.util.Comparator), sleep(long), with(groovy.lang.Closure)
Если я сниму флажок Use Groovy Sandbox
, исключение исчезнет, и задание будет выполнено без проблем.К сожалению, эта опция недоступна для конвейера из рабочего процесса SCM.
Похоже, что при разборе In Script Approval
не удается распознать лямбду в моем предикате фильтра и он по умолчанию исключает ее из области действия.
.filter( { run -> ( run.timestamp.getTime() > time7DaysAgo ) } )
Я бегу Jenkins ver. 2.138.3
.Как я могу вручную добавить это в белый список утвержденных подписей?