Вопрос:
Я пытаюсь сделать 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
Попробуйте использовать
- плагин Active Choice и параметр Extensible choice плагин для динамического репо и выбора ветвей
- Расширяемый параметр для выбора отрасли для репо по умолчанию.
Используйте следующие шаги:
-
Добавьте параметр расширения для вашей работы
-
выберите Система 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 для получения дополнительной информации. Надеюсь, что это будет полезно.!!; -)