Git выбрать ветку в Jenkins с помощью groovy script

Вопрос:Я пытаюсь сделать Parameterized build в Дженкинсе. Таким образом, пользователь может выбрать ветвь git, которую он хочет развернуть из каскадного меню. Возможны два способа: Написание имен ветвей в файле и настройка Jenkins для чтения этого файла (project configuration > extend choice parameter and selecting Property file). Проблема. Вы должны сделать локальный репозиторий зеркалом удаленного репо

Вопрос:

Я пытаюсь сделать Parameterized build в Дженкинсе. Таким образом, пользователь может выбрать ветвь git, которую он хочет развернуть из каскадного меню.

Возможны два способа:

  • Написание имен ветвей в файле и настройка Jenkins для чтения этого файла (project configuration > extend choice parameter and selecting Property file).

    Проблема. Вы должны сделать локальный репозиторий зеркалом удаленного репо и сохранить это локальное репо в синхронизации с удаленным репо. Другими словами, вам необходимо обновить файл, содержащий имя доступной ветки. Это требует запланированной работы cron, и мне не разрешено использовать этот подход.

  • Использование Groovy script (project configuration > extend choice parameter and selecting «Groovy script»). Затем вам понадобится Groovy script для получения имени ветки следующим образом: branches=master,feature/Feature-1,feature/Feature-2,hotfix/Hotfix-1,release/Release-1.

Я нашел Groovy script в здесь, но он не работает. Я установил Groovy на свою машину.

Может кто-нибудь мне помочь? Чтобы сделать рассказ коротким: мне нужен Groovy script, который возвращает доступные имена ветвей удаленного репозитория.

Ответ №1

Ниже приведена script ниже. Он основан на сценариях из связанного вопроса. Он фильтрует вывод команды git с простым регулярным выражением и создает список имен ветвей для указанного репозитория git. Протестировано на grails-core github repo:

def gitURL = «https://github.com/grails/grails-core.git» def command = «git ls-remote -h $gitURL» def proc = command.execute() proc.waitFor() if ( proc.exitValue() != 0 ) { println «Error, ${proc.err.text}» System.exit(-1) } def branches = proc.in.text.readLines().collect { it.replaceAll(/[a-z0-9]*trefs/heads//, ») } println branches Ответ №2

Для этого вам не нужен Groovy Script. Git Параметр плагин позволяет добавлять ветки git в качестве параметра.

Ответ №3

Вы можете использовать плагин расширенного выбора параметров для извлечения ветвей Git вашего клонированного репозитория. Для этого добавьте к свойству Master- Node переменную среды пути каталога .git, например:

Затем добавьте параметр Extensible Choice со следующим groovy script (и установите флажок “Использовать предопределенные переменные” ):

def envVars = jenkins.getNodeProperties()[0].getEnvVars() def NODE_PROJECT_PATH = envVars.get(‘NODE_PROJECT_PATH’) def gettags = «git ls-remote -t —heads origin».execute(null, new File(NODE_PROJECT_PATH)) return gettags.text.readLines() .collect { it.split()[1].replaceAll(‘\^\{\}’, »).replaceAll(‘refs/\w+/’, ») } .unique() .findAll { !it.startsWith(‘Branch_’) }

Это должно указать ваши ветки (я отфильтровал все “Branch_ *” из списка):

Примечания:
Если вы ничего не видите при проверке script (с кнопкой “Запустить кнопку script now” ), вероятно, из-за требуемой подсказки пользователя/пароля – поэтому сначала запустите “git ls-remote -t ​​-heads origin” в директории .git.
Чтобы сохранить учетные данные в Windows, попробуйте запустить “git config –global credential.helper wincred”.

Ответ №4

Попробуйте использовать

Используйте следующие шаги:

  • Добавьте параметр расширения для вашей работы

  • выберите Система Groovy Параметр выбора в поле параметра “Выбор”

  • Поместите следующий script в текстовое поле Groovy script и замените держатели мест “< > ” на требуемые значения.

    import groovy.json.JsonSlurper; try{ List<String>params = new ArrayList<String>() URL apiUrl = «https://api.github.com/users/<repo-owner>/repos?access_token=<github-access-token>».toURL() List branches = new JsonSlurper().parse(apiUrl.newReader()) for (branch in branches ) { params.add(branch.name) } return params } catch(IOException ex){ print ex }

  • Добавить активный активный реактивный параметр в вашу работу

  • Поместите Справочный параметр как репозиторий и следуйте script в Groovy script текстовое поле

    import groovy.json.JsonSlurper; try{ List<String>params = new ArrayList<String>() URL apiUrl = «https://api.github.com/repos/<repo-owner>/$repository/branches?access_token=<github-access-token>».toURL() List json = new JsonSlurper().parse(apiUrl.newReader()) for (repo in json ) { params.add(repo.name) } return params } catch(IOException ex){ print ex }

    Примечание:

    • $repository принимает динамическое значение из параметра репозитория.
    • игнорировать публичный репозиторий.
  • Теперь попробуйте выполнить задание с параметром

checkout github api docs для получения дополнительной информации. Надеюсь, что это будет полезно.!!; -)

Оцените статью
Добавить комментарий