Jenkins JobDSL multibranchPipelineJob изменить путь сценария

Я пытаюсь создать multibranchPipelineJob в jobDSL, однако Jenkinsfile находится в другом месте по умолчанию. Я просмотрел документы https://jenkinsci.github.io/job-dsl-plugin/#path/multibranchPipelineJob, и я не вижу способа сделать это. Глядя на config.xml для созданного вручную multibranchPipelineJob, scriptPath находится в разделе, но я не могу найти метод DSL для его установки.

Может ли кто-нибудь предложить какую-либо помощь в том, как это сделать? Ваше здоровье


person apr_1985    schedule 16.01.2018    source источник
comment
Хммм, похоже, что возможность сделать это находится в мастере github.com/jenkinsci/job-dsl-plugin/blob/master/job-dsl-core/ Так что мне, возможно, просто придется дождитесь выхода 1.67 DSL :(   -  person apr_1985    schedule 16.01.2018


Ответы (4)


Job DSL теперь предоставляет способ сделать это:

multibranchPipelineJob('my-build') {
    factory {
        workflowBranchProjectFactory {
            scriptPath('path-to-Jenkinsfile')
        }
    }
}

Подтверждена работа с Job DSL 1.69 и доступна с версии 1.67, согласно примечаниям к выпуску.

Изменить: еще раз протестировано с помощью Job DSL 1.77, и оно по-прежнему работает должным образом. Если вы хотите увидеть документацию для этого синтаксиса, вам нужно посмотреть установку Jenkins с установленным плагином Multibranch Pipeline по этому пути:

https://your-jenkins-url/plugin/job-dsl/api-viewer/index.html#path/multibranchPipelineJob-factory-workflowBranchProjectFactory-scriptPath

person nerdherd    schedule 09.06.2018
comment
Это обязательно должно быть добавлено в документацию Jenkins Job Dsl. - person Matthias B; 24.05.2019
comment
Можно ли добавить несколько scriptPath? - person NickBroon; 04.06.2020
comment
Strange не смог запустить его ни на 1.77, ни на игровой площадке DSL. Я получаю следующую ошибку: javaposse.jobdsl.dsl.DslScriptException: (сценарий, строка 3) Нет подписи метода: javaposse.jobdsl.dsl.helpers.workflow.BranchProjectFactoryContext.workflowBranchProjectFactory() применим для типов аргументов: (script$_run_closure1 $_closure2$_closure3) значения: [script$_run_closure1$_closure2$_closure3@33e4c96c] - person Joerg S; 17.12.2020

Поскольку этот вопрос по-прежнему популярен, чтобы сделать это в JCasC, вы можете сделать это

jobs:
  - script: >
      folder('common');
      multibranchPipelineJob('common/jcasc-deploy') {
        factory {
          workflowBranchProjectFactory {
            scriptPath('Jenkinsfile')
          }
        }
        branchSources {
          branchSource {
            source {
              gitSCMSource {
                remote('[email protected]:PROJECT/REPO.git')
                credentialsId('gitlab-key')
                id('jcasc-deploy')
              }
            }
          buildStrategies {
            buildAllBranches {
              strategies {
                skipInitialBuildOnFirstBranchIndexing()
              }
            }
          }
        }
      }
      triggers {
        periodicFolderTrigger {
          interval('1440')
        }
      }
      configure { node ->
        node / sources / data / 'jenkins.branch.BranchSource' / source / traits {
          'jenkins.plugins.git.traits.BranchDiscoveryTrait'()
        }
      }
    }
person apr_1985    schedule 06.12.2019
comment
Это полезно, но изначально у меня это не работало, пока я не понял, что для работы части buildStrategies требуется плагин basic-branch-build-strategies. - person Yeroc; 26.06.2020
comment
@Yeroc спасибо, ваш комментарий сэкономил много рабочего времени - person c4f4t0r; 14.12.2020

После изрядного количества гугления я нашел кое-что, что работает:

configure {
    it / factory(class: 'org.jenkinsci.plugins.workflow.multibranch.WorkflowBranchProjectFactory') {
        owner(class: 'org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject', reference: '../..')
        scriptPath("jenkins/[where ever you want]/Jenkinsfile")
    }
}

Кажется, это работает для меня.

person kgdesouz    schedule 06.02.2018
comment
Это решение для всех, где принятый ответ не работает, что в настоящее время относится к jobDSL 1.77. - person Joerg S; 09.12.2020
comment
@JoergS Этот ответ должен работать для любой версии Job DSL, но он использует более необработанный синтаксис, существовавший до того, как Job DSL поддержал более удобный синтаксис. Job DSL 1.67 представил более приятный синтаксис, который все еще работает на 1.77 (я проверил новую установку Jenkins с Job DSL 1.77, чтобы быть уверенным). - person nerdherd; 10.12.2020

Настройка немного скрыта, но Автоматически сгенерированный DSL поддерживает установку пути скрипта для многоветвевого задания:

multibranchPipelineJob('example') {
  factory {
    workflowMultiBranchProjectFactory {
      scriptPath('my-location/Jenkinsfile')
    }
  }
} 
person daspilker    schedule 31.01.2018
comment
Хотя я могу понять, почему это должно работать, у меня это не сработало :-(. Вы проверяли @daspilker? - person Steve-B; 23.04.2018