Синтаксис Jenkinsfile - есть ли DRY-пример общих шагов сборки Python?
У меня есть репозиторий "А" с общими сценариями сборки Python, которые я сегодня запускаю на различных этапах сборки "Выполнение оболочки" в Jenkins. Я засеяю эти шаги / скрипты из Groovy-кода job-dsl.
Используя более новую концепцию Jenkins 2 Pipeline в репозитории "B" (где находится исходный код моего приложения), как должен выглядеть мой Jenkinsfile в этом репо, чтобы он оставался сухим и повторно использовал мои существующие скрипты сборки Python?
Я изучил плагин "workflow-cps-global-lib" и попытался настроить "Конвейерные библиотеки" на своем мастере Jenkins, но, поскольку эта установка ориентирована на Groovy, она не просто кажется правильным выбором, или я просто не освоиться с правильным синтаксисом. Я не могу найти никаких примеров по этому конкретному случаю использования.
В основном я просто хочу, чтобы это в моем Jenkinsfile:
- Клонировать мой репо-источник ('B') для моего приложения
- Сделайте мои общие скрипты Python для сборки из моего репо "A" доступными
- Выполнить сценарии сборки Python из различных шагов "execute shell"
- Etcetera...
1 ответ
рабочий процесс-cps-global-lib это путь. Установите его и настройте в "Управление Jenkins -> Настройка системы -> Глобальные конвейерные библиотеки", чтобы использовать ваш репозиторий.
Если вы решили использовать скрипты Python, а не Groovy, поместите все свои скрипты Python в каталог (root)/resources.
в вашем Jenkinsfile - загрузите скрипт с libraryResource
script = libraryResource 'my_script.py'
и использовать это
sh script
(недостаточно репутации, чтобы добавить комментарий к принятому ответу выше)
Учитывая скрипт Python в /resources/myscript.py
как это:
#!/usr/bin/env python3
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--echo")
args = parser.parse_args()
print(args.echo)
Используйте такую функцию Jenkins:
def runPy(String scriptPath, def args) {
String script = libraryResource(scriptPath)
String argsString = args.join(' ')
sh "python3 -c '${script}' ${argsString}"
}
runPy('myscript.py', ['--echo', 'foo'])