我们如何扩展 Jenkins 工作流 dsl?

How do we extend the Jenkins workflow dsl?

如果我正在开发一个插件并想从使用这样的步骤切换:

step([$class: 'Gradle', 
           switches: "-PenableInstallerDistribution=true",
           tasks: 'build install',
           gradleName: '(Default)',
           useWrapper: true,
           makeExecutable: true,
           fromRootBuildScriptDir: true,
           useWorkspaceAsHome: true])

像这样一个不错的 dsl 元素:

gradle switches: "-PenableInstallerDistribution=true",
       tasks: 'build install',
       gradleName: '(Default)',
       useWrapper: true,
       makeExecutable: true,
       fromRootBuildScriptDir: true,
       useWorkspaceAsHome: true

也许最重要的是,出现在片段生成器中,我该怎么办?我查看了我能找到的文档,但仍然找不到关于扩展 dsl 的任何建议。

首先,如果您除了省略 step 之外没有真正自定义步骤配置,那么这可能是浪费时间,因为 Workflow 核心的未来修订可能会包含“元步骤”的语法糖”,例如 stepcheckout 和(现在)wrap。 (并且任何 SimpleBuildStep 已经显示在 step 下的 代码段生成器 中。)

也就是说,如果您确实需要创建第一个 class 步骤,则需要添加对 workflow-step-api 的插件依赖,并且通常会扩展 AbstractStepImplAbstractStepDescriptorImpl, 和 AbstractStepExecutionImpl.

如果您正在尝试实施 JENKINS-27393 then I would say that a useful implementation needs to wait for the infrastructural JENKINS-26055,因为仅包装现有的 Gradle 构建器将不允许流程在此步骤中间的 Jenkins 重启(或从属断开连接)中幸存下来。