语境
我正在创建一个添加自定义管道步骤的 Jenkins 插件。
当我的步骤 ( ) 用于管道脚本时,我已成功执行 Java 代码dostuff
,例如
脚本1
node {
stage( 'doingstuff' ) {
dostuff()
}
}
但是,我希望我的自定义步骤在 Jenkins WebUI 可视化中呈现一些阶段和并行流,所以我想在我的插件中做相当于甚至可能是块的parallel([...])
操作stage( ... ) { ... }
。node { ... }
例如,如果以下是我的预期管道:
脚本2
node {
stage( 'one' ) {
parallel([
"stream one": {
sh "echo hi from stream one"
},
"stream two": {
sh "echo hi from stream two"
}
])
}
}
我想把它减少到
脚本3
node {
dostuff()
}
在哪里dostuff()
会做相当于
脚本4
stage( 'one' ) {
parallel([
"stream one": {
sh "echo hi from stream one"
},
"stream two": {
sh "echo hi from stream two"
}
])
}
并且,重要的是,将在 Jenkins WebUI 的“Pipeline Steps”视图中正确呈现,以便并行流将在 Blue Ocean Web UI 中正确呈现。
虽然我已经看到如何从管道脚本(例如)执行传递给插件中定义的自定义步骤的主体块,但我无法弄清楚在 Java 代码中创建主体块的习语。
我不想/不能在纯 Groovy 中这样做,因为
- 我要编写的“真实”逻辑将取决于默认情况下不在类路径上的几个非 Jenkins JAR 中的类,来自几个 Maven 存储库(因此无法
import
编辑(尽管它们可能是@Grab
'd)) - 我要编写的“真实”逻辑将使用并发库,包括 Java 的
synchronized
,据我所知,管道脚本不支持这一点。 - 我想编写的“真实”逻辑希望在 JVM 中逻辑的所有实例之间共享状态,据我所知,管道脚本无法与其他正在运行的管道脚本通信。
问题)
- 是否可以/是否可以在 Java 中创建管道主体块,并让自定义管道步骤执行该块?
- 有没有我可以查看的插件?