Проблема безопасности при использовании фильтра в вызове API Jenkins, как добавить функцию фильтра в белый список - PullRequest
0 голосов
/ 06 декабря 2018

Если я использую следующий конвейер 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.Как я могу вручную добавить это в белый список утвержденных подписей?

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