Как создать блок тела для пользовательского шага конвейера Дженкинса в коде Java моего плагина Дженкинса?
Контекст
Я создаю плагин Jenkins, который добавляет пользовательский шаг конвейера.
Я успешно получил Java-код для выполнения, когда Мой Шаг (dostuff
) используется в скрипте конвейера, например
Script1
node {
stage( 'doingstuff' ) {
dostuff()
}
}
Однако я хочу, чтобы мой пользовательский шаг отображал некоторые этапы и параллельные потоки в визуализации Jenkins WebUI, поэтому я хочу делать эквивалент parallel([...])
и stage( ... ) { ... }
и, возможно, даже node { ... }
блоки в мой плагин. Например, если бы мой предполагаемый конвейер был следующим:
Script2
node {
stage( 'one' ) {
parallel([
"stream one": {
sh "echo hi from stream one"
},
"stream two": {
sh "echo hi from stream two"
}
])
}
}
Я хотел бы сократить его до
Script3
node {
dostuff()
}
Где dostuff()
сделает эквивалент
Script4
stage( 'one' ) {
parallel([
"stream one": {
sh "echo hi from stream one"
},
"stream two": {
sh "echo hi from stream two"
}
])
}
И, что важно, будет правильно отображаться в представлении "шаги конвейера" веб-интерфейса Дженкинса, и таким образом параллельные потоки будут правильно отображаться в веб-интерфейсе Blue Ocean.
Пока я видел как выполнить блок тела, который передается на пользовательский шаг, определенный в плагине, из сценария конвейера (например ), я не могу понять идиому для создания блока тела в коде Java.
Я не хочу/не могу сделать это в чистом Groovy, потому что
- "реальная" логика, которую я хочу написать, будет зависеть от классов в нескольких не-Jenkins Jar, которые по умолчанию не находятся на пути к классу, из нескольких репозиториев Maven (и поэтому не могут быть
import
ed (хотя они может быть, это@Grab
' d))
"Реальная" логика, которую я хочу написать, будет использовать библиотеки параллелизма, включая Java
synchronized
, и, насколько я могу судить, сценарии конвейера не поддерживают это.
"Реальная" логика, которую я хочу написать, хотела бы поделиться состоянием во всех экземплярах логики в JVM, и, насколько я могу судить, сценарии конвейера не могут взаимодействовать с другими запущенными сценариями конвейера.
Вопрос (ы)
- возможно ли / должно ли быть возможно создать блок тела конвейера в Java, и должен ли пользовательский шаг конвейера выполнить этот блок?
- есть ли плагины, которые делают это, что я мог бы посмотреть?