如何为 Job DSL 创建的多分支作业设置发现模式

How to set the discovery modes for multibranch job created by Job DSL

我是 Jenkins 的新手,我正在尝试解决问题。

有没有办法通过 Groovy 添加 Branch Sources 行为。这是使用 Jenkins 分析 SonarQube 中的 GitHub 个项目。

我正在创建多分支管道,但似乎无法弄清楚如何添加以下行为。

这些行为在 UI 中创建作业时默认出现,但在通过 Groovy 创建作业时不会出现。

我已将其定义为我的管道。知道如何添加这些其他参数吗?

multibranchPipelineJob('Foo') {
    displayName('Foo')
    description('Jenkins')
    branchSources {
        branchSource {
            source {
                github {
                    id('15')
                    repoOwner('12345')
                    repository('foo')
                    repositoryUrl('https://example.com')
                    configuredByUrl(true)
                    credentialsId('foo')

                traits {
                    gitBranchDiscovery()
                }
                    
                }
            }
        }
    }
    orphanedItemStrategy {
        discardOldItems {
            numToKeep(10)
        }
    }
}

我试过添加以下参数,但出现错误。

import jenkins.plugins.git.traits.*

def traits = []
traits.add(new TagDiscoveryTrait())
traits.add(new LocalBranchTrait())
gitSCMSource.setTraits(traits)

有没有办法通过 Groovy 创建作业,但使用在 UI 中创建作业时会出现的默认设置?

您可以使用此 URL:

检查 Jenkins 上的所有可用选项
https://<your-jenkins>/plugin/job-dsl/api-viewer/index.html

分支发现模式

multibranchPipelineJob('Foo') {
    branchSources {
        branchSource {
            source {
                github {
                    traits {
                        gitHubBranchDiscovery {
                            strategyId(1)
                            // strategyId(2)
                            // strategyId(3)
                        }
                    }
                }
            }
        }
    }
}

策略编号:

  • 1 - 发现所有分支,作为拉取请求源的分支除外
  • 2 - 仅发现作为拉取请求源的分支
  • 3 - 发现所有分支

拉取请求发现模式

multibranchPipelineJob('Foo') {
    branchSources {
        branchSource {
            source {
                github {
                    traits {
                        gitHubPullRequestDiscovery {
                            strategyId(1)
                            // strategyId(2)
                            // strategyId(3)
                        }
                    }
                }
            }
        }
    }
}

策略编号:

  • 1 - 发现每个拉取请求一次,发现的修订对应于与目标分支的当前修订合并的结果
  • 2 - 发现每个拉取请求一次,发现的修订对应于拉取请求头修订而不合并
  • 3 - 发现当前拉取请求修订以及与当前目标分支修订合并的拉取请求

分叉拉取请求发现模式

由于 Jenkins (JENKINS-60874) 中的错误,您必须使用 configure 块:

multibranchPipelineJob('Foo') {
    configure {
        def traits = it / 'sources' / 'data' / 'jenkins.branch.BranchSource' / 'source' / 'traits'
        traits << 'org.jenkinsci.plugins.github__branch__source.ForkPullRequestDiscoveryTrait' {
            strategyId(1)
            // strategyId(2)
            // strategyId(3)
            trust(class: 'org.jenkinsci.plugins.github_branch_source.ForkPullRequestDiscoveryTrait$TrustPermission')
            // trust(class: 'org.jenkinsci.plugins.github_branch_source.ForkPullRequestDiscoveryTrait$TrustNobody')
            // trust(class: 'org.jenkinsci.plugins.github_branch_source.ForkPullRequestDiscoveryTrait$TrustContributors')
            // trust(class: 'org.jenkinsci.plugins.github_branch_source.ForkPullRequestDiscoveryTrait$TrustEveryone')
        }
    }
}

策略编号:

  • 1 - 发现每个拉取请求一次,发现的修订对应于与目标分支的当前修订合并的结果
  • 2 - 发现每个拉取请求一次,发现的修订对应于拉取请求头修订而不合并
  • 3 - 发现当前拉取请求修订以及与当前目标分支修订合并的拉取请求

信任class:

  • TrustPermission - 信任对存储库具有写入权限的人
  • TrustNobody - 不信任任何人
  • TrustContributors - 信任存储库的贡献者
  • TrustEveryone - 相信每个人