Синтаксис Jenkinsfile - есть ли DRY-пример общих шагов сборки Python?

У меня есть репозиторий "А" с общими сценариями сборки Python, которые я сегодня запускаю на различных этапах сборки "Выполнение оболочки" в Jenkins. Я засеяю эти шаги / скрипты из Groovy-кода job-dsl.

Используя более новую концепцию Jenkins 2 Pipeline в репозитории "B" (где находится исходный код моего приложения), как должен выглядеть мой Jenkinsfile в этом репо, чтобы он оставался сухим и повторно использовал мои существующие скрипты сборки Python?

Я изучил плагин "workflow-cps-global-lib" и попытался настроить "Конвейерные библиотеки" на своем мастере Jenkins, но, поскольку эта установка ориентирована на Groovy, она не просто кажется правильным выбором, или я просто не освоиться с правильным синтаксисом. Я не могу найти никаких примеров по этому конкретному случаю использования.

В основном я просто хочу, чтобы это в моем Jenkinsfile:

  1. Клонировать мой репо-источник ('B') для моего приложения
  2. Сделайте мои общие скрипты Python для сборки из моего репо "A" доступными
  3. Выполнить сценарии сборки Python из различных шагов "execute shell"
  4. 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'])
Другие вопросы по тегам