#jenkins #jenkins-pipeline #jenkins-plugins
#дженкинс #дженкинс-конвейер #дженкинс-плагины
Вопрос:
Я использую конвейер Дженкинса. Мой вариант использования заключается в том, что разработчик использует простой файл *.ini, который анализируется скриптом python, чтобы добавлять или удалять stage в файле jenkins, когда они захотят. Я не хочу, чтобы они вручную редактировали файл jenkins, потому что они не будут знать, как это работает.
Ожидаемое поведение: При запуске сборки я хотел бы сначала выполнить скрипт на python, который может записывать в файл jenkins для добавления / удаления этапа в соответствии с файлом *.ini.
Насколько я понимаю, когда событие запускает сборку jenkins, первое, что оно делает, это открывает jenkinsfile. Однако я хотел бы знать, возможно ли запустить какой-нибудь сценарий предварительной сборки перед этим?
Спасибо
Редактировать: вот простой вид запуска конвейера (пользовательский интерфейс blue ocean)
Файл ini может, например, удалить на этапе компиляции пошаговый план сборки C, удалив groovy-код, выполняющий это в файле jenkins
Комментарии:
1. как насчет изменения модели на параметризованные конвейеры ? Я сам им не пользовался, но, похоже, он лучше подходит для вашего случая. Итак, вместо того, чтобы анализировать файл, чтобы решить, что делать, вы можете создать это на основе переданного параметра и все, что вы думаете?
2. Я собираюсь изучить это сегодня днем, чтобы увидеть, соответствует ли это моим потребностям, спасибо за ваш ответ
3. Хорошо, я также попытаюсь подготовить простой пример и опубликовать его в качестве полного ответа позже
4. Спасибо, мне удалось добавить параметр в свой конвейер благодаря вашей ссылке и следующей минуте Дженкинса . Однако мне не удалось использовать вызов API для запуска сборки с пользовательским параметром без взаимодействия с пользователем. В настоящее время я проверяю, подойдет ли такое поведение для каждого предполагаемого мной варианта использования, и я вернусь к вам позже.
5. Когда сборка запускается автоматически, параметром по умолчанию будет use, который у меня не будет работать. Например, при переходе к ветке будет использоваться параметр по умолчанию, но я мог бы использовать git-хук для запуска скрипта, который проанализирует файл *.ini, а затем сгенерирует правильный URL-адрес с параметром, необходимым для запуска Jenkins.
Ответ №1:
Приведите пример для справки.
node {
git url: '', branch: '', credentialsId: ''
def parseStr = sh(script: 'python parser.py xxx.ini', returnStdout: true).trim()
// the python parser expect to return a JSON string like:
// {'run_stage1': false, 'run_stage2': true}
def parseObj = readJSON text: parseStr
stage('stage 1') {
if(parseObj.run_stage1) {
echo 'stage1'
...
}
}
stage('stage 1') {
if(parseObj.run_stage2) {
echo 'stage1'
....
}
}
}
Конвейер Дженкинса предоставлял API: readJSON, readYaml, readProperties
для чтения файлов JSON, YAML и Properties.
Если вы выберете любой из них для замены ini
файла, вы можете удалить анализатор python, чтобы упростить свой конвейер
Комментарии:
1. Скрипт на python не нужен, мне нужно только предоставить определенный параметр конвейеру, похоже, что эти API тоже могут выполнить эту работу. Спасибо, я изучаю это