Сначала немного предыстории, почему я хочу эту сумасшедшую вещь. Я создаю плагин в Jenkins, который предоставляет API для скриптов, которые запускаются из конвейерного скрипта для независимой связи с jenkins. Например, shell-скрипт может затем сказать jenkins начать новый этап с запущенного скрипта.
У меня есть связь между скриптом и работающим Jenkins, но проблема в том, что я теперь хочу попробовать иначать этап с обратного вызова в моем коде, но я не могу понять, как это сделать.
Материал, который я пробовал и потерпел неудачу в:
Начать новый StageStep.java
Кажется, я не могу найти способ правильно создать экземпляр и ввести шаг в жизненный цикл. Я изучил DSL.java
, но, похоже, не могу найти экземпляр для вызова invokeStep()
, и при этом я не смог выяснить, как создать экземпляр DSL.java
в правильной среде.
Посмотрите на StageStepExecution.java
и сделайте то, что он делает.
Кажется, что он либо вызывает тело с переменной среды и ничего больше, либо устанавливает некоторые действия и сохраняет состояние в файле конфигурации, когда у него нет тела. Я не мог выяснить, как подключается плагин Pipeline: Stage View, но, похоже, он не читает файл конфигурации. Я попытался установить действия (даже внутренний класс с помощью отражения), но это, похоже, ничего не делало.
Вставить пользовательскую строку как тело Groovy и вызвать ее с помощью csc.newBodyInvoker()
Хакерским решением, которое я придумал, было просто сгенерировать скрипт groovy и запустить его, как это делает ParallelStep. Но песочница не позволяет мне вызывать new GroovyShell().evaluate("")
, и если я одобряю этот вызов, шаг 'stage' вызывает исключение MissingMethodException. Поэтому я также не навязываю сценарий с правильной средой. Предоставление EnvironmentExpander не имеет никакого значения.
Ссылка и изменение рабочего процесса / {n} .xml
Изменение имени этапа в соответствующем workflow/{n}.xml
и перезагрузка сервераобновляет имя сцены, но изменение моего пользовательского этапа, чтобы оно выглядело как обычное, похоже, не добавляет шаг в качестве этапа.
Материал, который я исследовал:
- Если какой-то другой плагин делает что-то подобное, но я не смог найти ни одного примера плагинов, запускающих другие шаги.
- Как Дженкинс обрабатывает сценарии и запускает шаги, но кажется, чтокаждый шаг вызывается напрямую через имя метода после разбора скрипта, и я не нашел способа подключиться к этому.
- Другие плагины, использующие StageView через другие методы, но я не смог найти ни одного.
- добавить AtomNode в качестве заголовка на работающий поток, но я не смог найти, как заменить / добавить головку, и не решаюсь возиться с потоками Дженкинса.
Я провел несколько дней за этим, казалось бы, тривиальным звонком, но, похоже, не могу понять это.