如何在我的 Jenkins 插件的 Java 代码中为自定义 Jenkins 管道步骤创建主体块?
How do I create a Body block for a custom Jenkins Pipeline Step in the Java code of my Jenkins plugin?
上下文
我正在创建一个 adds a custom pipeline step.
的 Jenkins 插件
当我的步骤 (dostuff
) 在管道脚本中使用时,我已成功获得要执行的 Java 代码,例如
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"
}
])
}
并且,重要的是,将在 Jenkins WebUI 的 "Pipeline Steps" 视图中正确呈现,这样并行流将在 Blue Ocean Web UI 中正确呈现。
虽然我已经看到如何从管道脚本 (for example) 执行传递给插件中定义的自定义步骤的正文块,但我无法弄清楚 在 Java 代码中创建 主体块。
我不希望 to/cannot 纯 Groovy 这样做,因为
- 我想写的 "real" 逻辑将依赖于 类 在几个默认情况下不在类路径上的非 Jenkins JAR,来自几个 Maven 存储库(因此不能
import
ed(尽管他们可能 @Grab
'd))
- 我想写的 "real" 逻辑将使用并发库,包括 Java 的
synchronized
,据我所知管道脚本不支持这个。
- 我想编写的 "real" 逻辑希望在 JVM 中的所有逻辑实例之间共享状态,据我所知,管道脚本无法与其他 运行 管道通信脚本。
问题
- it/should是否可以在 Java 中创建管道主体块,并让自定义管道步骤执行该块?
- 有没有我可以查看的执行此操作的插件?
我在 Jenkins World 2017 上与 Andrew Bayer(为 CloudBees 管道工作的工程师)交谈,他确认在 Jenkins 插件中从纯 Java 组成其他管道步骤的管道步骤在架构上是不可能的-英寸
上下文
我正在创建一个 adds a custom pipeline step.
的 Jenkins 插件当我的步骤 (dostuff
) 在管道脚本中使用时,我已成功获得要执行的 Java 代码,例如
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"
}
])
}
并且,重要的是,将在 Jenkins WebUI 的 "Pipeline Steps" 视图中正确呈现,这样并行流将在 Blue Ocean Web UI 中正确呈现。
虽然我已经看到如何从管道脚本 (for example) 执行传递给插件中定义的自定义步骤的正文块,但我无法弄清楚 在 Java 代码中创建 主体块。
我不希望 to/cannot 纯 Groovy 这样做,因为
- 我想写的 "real" 逻辑将依赖于 类 在几个默认情况下不在类路径上的非 Jenkins JAR,来自几个 Maven 存储库(因此不能
import
ed(尽管他们可能@Grab
'd)) - 我想写的 "real" 逻辑将使用并发库,包括 Java 的
synchronized
,据我所知管道脚本不支持这个。 - 我想编写的 "real" 逻辑希望在 JVM 中的所有逻辑实例之间共享状态,据我所知,管道脚本无法与其他 运行 管道通信脚本。
问题
- it/should是否可以在 Java 中创建管道主体块,并让自定义管道步骤执行该块?
- 有没有我可以查看的执行此操作的插件?
我在 Jenkins World 2017 上与 Andrew Bayer(为 CloudBees 管道工作的工程师)交谈,他确认在 Jenkins 插件中从纯 Java 组成其他管道步骤的管道步骤在架构上是不可能的-英寸