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

时间:2021-06-07 12:27:01

标签: jenkins jenkins-pipeline jenkins-groovy jenkins-job-dsl

我是 Jenkins 的新手,我正在努力解决问题。

有没有办法通过 Groovy 添加分支源行为。这是使用Jenkins在SonarQube中分析GitHub项目。

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

这些行为在 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 中创建作业时会出现的默认设置?

1 个答案:

答案 0 :(得分:3)

您可以使用此 URL 检查 Jenkins 上的所有可用选项:

https://<your-jenkins>/plugin/job-dsl/api-viewer/index.html

分支发现模式

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

策略 ID:

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

拉取请求发现模式

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

策略 ID:

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

Fork 拉取请求发现模式

由于 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')
        }
    }
}

策略 ID:

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

信任类:

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