Отключение одновременных сборок для заданий многоотраслевого конвейера с помощью Job DSL

Я пытаюсь создать задания Multibranch Pipeline Jobs с помощью Job DSL, но хочу отключить одновременные сборки в каждой ветке. Я пробовал следующий фрагмент кода, но он не сработал. «Не разрешать одновременные сборки» все еще не отмечен флажком в новых ветках.

multibranchPipelineJob("${FOLDER_NAME}/${JOB_NAME}") {
    branchSources {
        git {
            remote("https://gitlab.com/${REPO_PATH}")
            credentialsId('gitlab_credentials')
            includes('*')
        }
    }
    configure { 
        def factory = it / factory(class: 'com.cloudbees.workflow.multibranch.CustomBranchProjectFactory')
        factory << disableConcurrentBuilds()
    }
    orphanedItemStrategy {
        discardOldItems {
            numToKeep(1)
        }
    }
}

Я также пробовал это при закрытии конфигурации:

factory << properties {
    disableConcurrentBuilds()
}

Но это вызвало следующее исключение:

19:03:50 groovy.lang.GroovyRuntimeException: Ambiguous method overloading for method groovy.util.Node#leftShift.
19:03:50 Cannot resolve which method to invoke for [null] due to overlapping prototypes between:
19:03:50    [class groovy.util.Node]
19:03:50    [class java.lang.String]

person farukdgn    schedule 16.03.2020    source источник
comment
Мне это тоже нужно. Я заметил, что в моем экземпляре jenkins в документации по API jobDSL указано, что свойство disableConcurrentBuilds() НЕ поддерживается в заданиях многоотраслевого конвейера. Я также хотел бы указать вам на это связанное обсуждение: gist.github.com/tknerr/c79a514eedb4bda8fb49386   -  person timblaktu    schedule 05.11.2020


Ответы (1)


Мне это тоже нужно. Я заметил, что в моем экземпляре jenkins в документации api jobDSL указано, что свойство disableConcurrentBuilds () НЕ поддерживается в заданиях многоотраслевого конвейера.

Я только что вернулся к соответствующему обсуждению, которое у меня было с @tknerr, в котором он указал, что есть ЕСТЬ функция ограничения скорости, доступная для многоотраслевых конвейеров через jobDSL.

Моя команда только что столкнулась с проблемой с запуском pollSCM из-за этой ошибки Jenkins, и поэтому я реализую это в jobDSL, чтобы сделать наши задания более устойчивыми к этому. Как и вы, я хотел просто отключить ConcurrentBuilds, как это можно сделать в конвейерах, но поскольку ограничение скорости кажется единственным решением, доступным в настоящее время для многоотраслевых конвейеров, я экспериментировал с помещением этого в наши jobDSL:

  strategy {
    defaultBranchPropertyStrategy {
      props {
        rateLimitBranchProperty {
          count(2)
          durationName("hour")
        }
      }
    }
  }

Это, конечно, ужасный обходной путь, поскольку он накладывает неприятную зависимость в jobDSL от необходимости знать, сколько времени занимает сборка, но я готов принять эту альтернативу необходимости отправлять параметр disableConcurrentBuilds в файл Jenkins в сотнях веток.

Это также едва ли даже эффективно для достижения цели, поскольку мы хотим разрешить параллельные сборки в разных ветвях, но хотим предотвратить слишком быстрое создание отдельных заданий веток.

Мы должны проверить, есть ли в Jenkins запрос функции для этого (ваш исходный запрос).

В моем экземпляре jenkins (v2.222.3, Pipeline: multibranch v2.22) здесь описаны настройки для применения ко всем веткам:

https: // ‹my_jenkins_fqdn› /plugin/job-dsl/api-viewer/index.html#path/multibranchPipelineJob-branchSources-branchSource-strategy-allBranchesSame-props-rateLimit

и здесь для применения его к конкретным веткам:

https: // ‹my_jenkins_fqdn› /plugin/job-dsl/api-viewer/index.html#path/multibranchPipelineJob-branchSources-branchSource-strategy- namedBranchesDifferent-defaultProperties-rateLimit

РЕДАКТИРОВАТЬ: Также хотелось связать с связанной проблемой Jenkins здесь.

person timblaktu    schedule 05.11.2020