Выбор ветви git Дженкинса при сборках, запускаемых scm

#git #jenkins

#git #Дженкинс

Вопрос:

Я прочитал документацию по плагину git, а также несколько вопросов здесь, но на самом деле не понял основную идею выбора ветки в git.

Настройка

Задание Дженкинса

Сценарий конвейера со следующим этапом

 stage('Clone Repo') {
   steps {
      checkout([$class: 'GitSCM',
                branches: [[name: "**"]],                            
                extensions: [[$class: 'CleanCheckout']],
                userRemoteConfigs: [[url: 'ssh://git@git.server/project/repo.git', credentialsId: 'secret']]
              ]);
      }
}
 

Сервер Bitbucket

Веб-хук при каждом нажатии, указывающем на: http://jenkins.url/git/notifyCommit?url=ssh://git@git.server/project/repo.git

Вопросы

Я понял следующее методом проб и ошибок:

  • Bitbucket срабатывает при каждом нажатии на каждую ветку
  • Дженкинс проверяет каждую ветку и пытается создать ветку, которая до сих пор не была собрана
  • Ветка Дженкинса может отличаться, особенно для новых созданных заданий
  • После запуска задания вручную Дженкинс поработал над каждой веткой. Следовательно, каждое новое push-уведомление от bitbucket приведет к созданию правильной ветки в jenkins

Правильно ли это? Интересно, может ли это неявное определение ветви привести к неожиданному поведению.

Параметр

Кроме того, я изменил сценарий конвейера, чтобы иметь параметр выбора ветки для сборки вручную:

     parameters {
        gitParameter(name: 'branch',
                        defaultValue: 'master',
                        type: 'PT_BRANCH',
                        selectedValue: 'DEFAULT',
                        quickFilterEnabled: true,
                        sortMode: 'ASCENDING_SMART',
                        branchFilter: 'origin/(.*)',
                        description: 'Branch to run the job')
    }
 

И этап проверки:

 stage('Clone Repo') {
   steps {
      checkout([$class: 'GitSCM',
                branches: [[name: "*/${branch}"]],                       
                extensions: [[$class: 'CleanCheckout']],
                userRemoteConfigs: [[url: 'ssh://git@git.server/project/repo.git', credentialsId: 'secret']]
              ]);
      }
}
 

Для запуска задания вручную все работает нормально. Как я могу запустить это задание для правильной ветки (например, перезаписать параметр) с помощью webhook?

Заранее спасибо

Ответ №1:

Если я правильно понял ваш вопрос, вы хотите создать многоотраслевой конвейер.

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

https://devopscube.com/jenkins-multibranch-pipeline-tutorial/

Комментарии:

1. Спасибо @JandaTheMan. Я посмотрю. Помимо получения полного рабочего решения, я хотел бы понять поведение и идею, заданные в моем вопросе. Наиболее интересным является неявный (?) Выбор ветки в jenkins, который я действительно не понимаю.

2. Что вы подразумеваете под неявным определением ветки @amw?

3. Я имею в виду, что дженкинс, похоже, выполняет последнюю фиксацию в одной ветке, которая до сих пор не была собрана, без явного указания этого. Это происходит при ручном запуске, а также при запуске с помощью webhook. Что именно стоит за этой логикой?