Может ли сценарий Jenkins отключить параллельные сборки? - PullRequest
0 голосов
/ 18 октября 2018

Я переключаю свой декларативный конвейер Jenkins на скриптовый конвейер Jenkins.Однако направление 'options', которое я использовал ранее для disableConcurrentBuilds (), по-видимому, недоступно для скриптовых конвейеров согласно документации Jenkins .

Я видел некоторые предложения по использованию блокировки ресурсов для SO, но мне было интересно, есть ли более чистый и прямой способ предотвращения одновременных сборок в Jenkinsfile сценариев конвейеров?

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Вы смотрели генератор фрагментов с вашего сервера jenkins?Адрес должен быть похож на http://jenkinshost/pipeline-syntax/.

. Это поможет вам узнать о доступных опциях (также основанных на установленных плагинах), и здесь вы можете найти Sample Step: properties: Set job properties и установить флажок Do not allow concurrent builds.Нажмите на кнопку Generate pipeline script, и вы должны сгенерировать пример ее использования в задании конвейерного сценария:

properties([
        buildDiscarder(
                logRotator(
                        artifactDaysToKeepStr: '', 
                        artifactNumToKeepStr: '', 
                        daysToKeepStr: '', 
                        numToKeepStr: '')
        ), 
        disableConcurrentBuilds()
])

Можете ли вы попробовать и проверить, работает ли это?

Вы можетевставьте раздел свойств после вашего узла в ваш Jenkinsfile:

node {
    properties([
            buildDiscarder(
                    logRotator(..........same snippet as above..
0 голосов
/ 19 октября 2018

Я столкнулся с той же проблемой.Я использую плагин JOB DSL для генерации моих заданий Jenkins и для конвейеров. Мне пришлось изменить сгенерированный xml.

static void DisableConcurrentBuilds(context) {
    context.with {
        configure {
            def jobPropertyDescriptors = it / 'actions' / 'org.jenkinsci.plugins.workflow.multibranch.JobPropertyTrackerAction' / 'jobPropertyDescriptors'
            jobPropertyDescriptors << {
                string('org.jenkinsci.plugins.workflow.job.properties.DisableConcurrentBuildsJobProperty')
            }
            def properties = it / 'properties' << 'org.jenkinsci.plugins.workflow.job.properties.DisableConcurrentBuildsJobProperty' {}
        }
    }
}

Использование:

pipelineJob('example') {
    DisableConcurrentBuilds(delegate)
    definition {
        cps {
            script(readFileFromWorkspace('project-a-workflow.groovy'))
            sandbox()
        }
    }
}

В результате DisableConcurrentBuilds следующие записидобавляются в конфигурацию задания конвейера:

<?xml version="1.0" encoding="UTF-8"?><flow-definition>
    <actions>
        <org.jenkinsci.plugins.workflow.multibranch.JobPropertyTrackerAction>
            <jobPropertyDescriptors>
                <string>org.jenkinsci.plugins.workflow.job.properties.DisableConcurrentBuildsJobProperty</string>
            </jobPropertyDescriptors>
        </org.jenkinsci.plugins.workflow.multibranch.JobPropertyTrackerAction>
    </actions>
    <properties>
        <org.jenkinsci.plugins.workflow.job.properties.DisableConcurrentBuildsJobProperty/>
    </properties>
    ...
</flow-definition>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...