我正在尝试在jobDSL中创建multibranchPipelineJob,但是Jenkinsfile位于默认值的替代位置。我已经浏览了文档 https://jenkinsci.github.io/job-dsl-plugin/#path/multibranchPipelineJob我看不到做到这一点的方法。查看配置.xml对于手动创建的多分支管道作业,scriptPath 位于该部分中,但我找不到 DSL 方法来设置它。
任何人都可以提供有关如何执行此操作的任何帮助吗?干杯
Job DSL现在公开了一种执行此操作的方法:
multibranchPipelineJob('my-build') {
factory {
workflowBranchProjectFactory {
scriptPath('path-to-Jenkinsfile')
}
}
}
确认使用作业 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
由于这个问题仍然很受欢迎,因此要在 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'()
}
}
}
经过相当多的谷歌搜索,我发现了一些有用的东西:
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")
}
}
这似乎对我有用。
该设置有点隐藏,但自动生成的 DSL 支持为多分支作业设置脚本路径:
multibranchPipelineJob('example') {
factory {
workflowMultiBranchProjectFactory {
scriptPath('my-location/Jenkinsfile')
}
}
}
我们发现这种方法适用于 dsl 操场,以及除了插件之外使用 gradle JavaExec 任务时。 在这里找到它。
configure {
it / factory(class: 'org.jenkinsci.plugins.workflow.multibranch.WorkflowBranchProjectFactory') {
owner(class: 'org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject', reference: '../..')
scriptPath("jenkinsfile")
}
}
我们的 Gradle 方法如下,它允许工程师在本地生成,并且我们有 Jenkins 生成/存储构建。 这使得与电流的差分变得更加容易。
sourceSets {
main {
groovy {
srcDirs = ['src']
}
resources {
srcDirs = ['resources']
}
}
test {
groovy {
srcDirs = ['test']
}
resources {
srcDirs = ['resources']
}
}
jobs {
groovy {
srcDirs 'jenkins-job-dsl'
compileClasspath += main.compileClasspath
}
}
}
dependencies {
...
compile 'org.jenkins-ci.plugins:job-dsl-core:1.77'
}
...
/**
* get current branch
* @return uses vairable on jenkins and runs git command locally
*/
String getBranchName() {
if (System.env.BRANCH_NAME) {
// Jenkins
if (System.env.BRANCH_NAME == 'master') {
return ''
} else {
return '_' + System.env.BRANCH_NAME.toLowerCase().replaceAll("/", "_")
}
} else {
return '_localDev'
}
}