В репозитории, где будут храниться будущие groovy файлы создадим директорию с именем "utilities" и в нем создадим файл "BitbucketMultibranch.groovy" со следующим содержимым:
package utilities import javaposse.jobdsl.dsl.DslFactory class BitbucketMultibranch { String name String description String displayName String serverUrl String repoOwner String repository String credentialsId String includeBranches String excludeBranches void build(DslFactory dslFactory) { def job = dslFactory.multibranchPipelineJob(name) { description(description) displayName(displayName) branchSources { branchSource { source { bitbucket { serverUrl(serverUrl) repoOwner(repoOwner) repository(repository) credentialsId(credentialsId) traits { headWildcardFilter { excludes(excludeBranches) includes(includeBranches) } } } } } } configure { def traits = it / sources / data / 'jenkins.branch.BranchSource' / source / traits traits << 'com.cloudbees.jenkins.plugins.bitbucket.BranchDiscoveryTrait' { strategyId(3) // detect all branches } } factory { workflowBranchProjectFactory { scriptPath('.jenkins/Jenkinsfile') } } orphanedItemStrategy { discardOldItems { numToKeep(15) } } } } }
Теперь для создания Item'а достаточно создать в корне репозитория файл с расширением groovy, для того, чтобы на Seed Job его обработал.
artem-dsl.groovy
import utilities.BitbucketMultibranch def multiPipeline = new BitbucketMultibranch( description: 'Just try make world better', name: 'Artem-DSL', displayName: 'Artem-DSL', serverUrl: 'https://git.artem.services', repoOwner: "dev", repository: "artem-dls", credentialsId: 'svc-bitbucket', includeBranches: 'development staging master', excludeBranches: '' ).build(this)
Сборка для GitHub’а.
GitHubMultibranch.groovy:
package utilities import javaposse.jobdsl.dsl.DslFactory class GithubMultibranch { String name String description String displayName String repositoryOwner String repositoryName String credentials String includeBranches String excludeBranches void build(DslFactory dslFactory) { def job = dslFactory.multibranchPipelineJob(name) { description(description) displayName(displayName) branchSources { github { scanCredentialsId(credentials) repoOwner(repositoryOwner) repository(repositoryName) includes(includeBranches) excludes(excludeBranches) } } factory { workflowBranchProjectFactory { scriptPath('.jenkins/Jenkinsfile') } } orphanedItemStrategy { discardOldItems { numToKeep(15) } } } } }
artem-github.groovy:
import utilities.GithubMultibranch def multiPipeline = new GithubMultibranch( description: 'Just try make world better', name: 'Github-Test', displayName: 'Github-Test', repositoryOwner: "artem", repositoryName: "dsl-test", credentials: 'artem-github', includeBranches: 'development staging master', excludeBranches: '' ).build(this)