26

我正在尝试在 jobDSL 中创建一个 multibranchPipelineJob,但是 Jenkinsfile 位于默认位置的替代位置。我查看了文档https://jenkinsci.github.io/job-dsl-plugin/#path/multibranchPipelineJob ,但我看不到这样做的方法。查看手动创建的 multibranchPipelineJob 的 config.xml,scriptPath 在该部分中,但我找不到 DSL 方法来设置它。

任何人都可以就如何做到这一点提供任何帮助吗?干杯

4

4 回答 4

33

Job DSL 现在公开了一种方法来做到这一点:

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

确认使用 Job DSL 1.69,根据发行说明,从 1.67 开始可用。

编辑:使用 Job DSL 1.77 再次测试,它仍然按预期工作。如果您想查看此语法的文档,您必须查看安装了 Multibranch Pipeline 插件的 Jenkins 安装,位于以下路径:

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

于 2018-06-09T15:29:33.023 回答
8

由于这个问题仍然很受欢迎,要在 JCasC 中执行此操作,您可以执行此操作

jobs:
  - script: >
      folder('common');
      multibranchPipelineJob('common/jcasc-deploy') {
        factory {
          workflowBranchProjectFactory {
            scriptPath('Jenkinsfile')
          }
        }
        branchSources {
          branchSource {
            source {
              gitSCMSource {
                remote('git@gitlab.com: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'()
        }
      }
    }
于 2019-12-06T11:41:22.533 回答
7

经过大量的谷歌搜索,我发现了一些有用的东西:

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")
    }
}

这似乎对我有用。

于 2018-02-06T20:04:53.333 回答
3

该设置有点隐藏,但自动生成的 DSL支持为多分支作业设置脚本路径:

multibranchPipelineJob('example') {
  factory {
    workflowMultiBranchProjectFactory {
      scriptPath('my-location/Jenkinsfile')
    }
  }
} 
于 2018-01-31T17:29:44.917 回答