Jenkins脚本控制台 - 我能在脚本控制台中使用Jenkins流水线DSL吗?

7

我想尝试一些Jenkins Pipeline DSL方法。样例代码如下:

node("linux-agent") {
  sh "ls -ltra"
}

我只是想快速尝试对脚本进行一些更改。因此,我尝试在“Jenkins脚本控制台”中运行它。但似乎这种方式不起作用。我必须每次编辑作业配置并运行作业来测试我的代码。

  1. 有没有一种快速的方法可以测试脚本更改而不必将它们放入管道作业中?
  2. 有办法在“Jenkins脚本控制台”中运行此脚本吗?

提前感谢!!


1
您可以在作业视图中尝试“重放”功能,它允许您在重放之前编辑管道。 - MaratC
3个回答

6

Jenkins脚本控制台仅支持Groovy脚本,管道步骤在此处不可用。

不过,您可以创建一个新的Jenkins“流水线”作业,其中包含一个文本框,可以放置您的流水线代码并运行它。 如果您有一个窗口打开来触发作业,另一个窗口用于编辑和应用更改,则效果很好。

输入图像说明


1
在脚本控制台中,您可以执行以下操作:
  • 创建一个临时项目

  • 为该项目运行构建

  • 打印日志

  • 之后删除该项目


import org.jenkinsci.plugins.workflow.job.WorkflowJob;
import org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition;
  
def jobName = 'tmp-project'

script = '''
node("linux-agent") {
  sh "ls -ltra"
}
'''
// Create Project
p = Jenkins.instance.createProject(WorkflowJob, jobName)
p.setDefinition(new CpsFlowDefinition(script, false));
p.save()

// Schedule Build
Jenkins.instance.queue.schedule(p, 0, null, null)

// Wait until build starts
while( p.builds.size() < 1 ) { }

// Wait until build finishes
def execution = p.builds[0].getExecutionPromise().get()
while (! execution.isComplete() ){}

// Print log and delete project
println p.builds[0].log
p.delete()

0
Pipeline(工作流)引擎在扩展的Groovy解释器中运行Groovy,设置自己的类加载器,注入自己的绑定,并设置自定义元类。修改后的解释器使用“传递样式”(CPS)来允许程序状态在节点之间进行序列化和传递。
我认为不可能将正在运行的GroovyScriptEngine切换为使用Groovy CPS解释器。而且管道/工作流程是围绕CPS编写的,因此它无法在常规的Groovy脚本引擎中运行。
因此,简而言之,答案是否定的。@Christopher发布的解决方法可能是最佳选择,直到有人愿意实现一个Jenkins插件,扩展脚本控制台以使用管道元类、类加载器等运行groovy-cps。
详情

Groovy Pipeline DSL运行时是在workflow-cps-plugin的基础上实现的,它依赖于groovy pluginGroovy CPS。核心步骤由workflow-basic-steps-plugin提供。

关键类似乎是

大多数地方都缺乏注释,但CpsFlowExecution.java中有有用的细节。

你不能实例化一个DSL(提供管道核心的steps变量)而不需要FlowExecutionOwner,它需要CpsFlowExecution,而后者又需要CPS解释器。 CpsFlowExecution与所有内容都有很强的联系。代码还期望this(您的脚本)将是CpsScript的实例,而脚本控制台只是一个普通的Groovy Script实例。

在我看来,您需要一个插件来接管脚本控制台,以实例化启用CPS的解释器并伪造FlowExecution。对我来说太难了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接