Как настроить режимы обнаружения для многоотраслевого задания, созданного с помощью задания DSL

#jenkins #jenkins-pipeline #jenkins-groovy #jenkins-job-dsl

Вопрос:

Я новичок в Дженкинсе и пытаюсь кое-что понять.

Есть ли способ добавить поведение источников ветвей с помощью Groovy. Это делается для анализа проектов GitHub в SonarQube с использованием Дженкинса.

Я создаю многоответвленный конвейер, но, похоже, не могу понять, как добавить следующее поведение. Поведение

Это поведение по умолчанию возникает при создании задания в пользовательском интерфейсе, но не отображается при создании задания с помощью 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, но с настройками по умолчанию, которые будут отображаться при создании задания в пользовательском интерфейсе?

Ответ №1:

Вы можете проверить все доступные параметры на вашем Jenkins, используя этот URL-адрес:

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

Режим обнаружения филиалов

 multibranchPipelineJob('Foo') {
    branchSources {
        branchSource {
            source {
                github {
                    traits {
                        gitHubPullRequestDiscovery {
                            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-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 — откройте текущую редакцию запроса на извлечение и запрос на извлечение, объединенный с текущей редакцией целевой ветви

Класс доверия:

  • TrustPermission — доверяйте тем, у кого есть разрешение на запись в репозиторий
  • Доверяй никому — никому не доверяй
  • TrustContributors — доверительные участники репозитория
  • Доверяй всем — доверяй всем