在另一个Scriptler脚本中调用Scriptler脚本

时间:2015-04-14 18:49:04

标签: jenkins jenkins-scriptler

我正在使用Jenkins的Scriptler plugin,并且很难找到有关如何共享我在脚本之间编写的脚本程序脚本的任何信息。我已尝试使用Scriptler API中的ScriptHelper,但在将参数传递给脚本时遇到了问题。

其他人遇到过这个问题并解决了吗?有没有一种标准的方法来执行此操作(不调用Jenkins REST API)来执行脚本?

更多细节 我们有一个完整的构建MultiJob,其中包含许多阶段作业,每个作业都有自己的工件,并且有3天的时间可以使用它们。当提升此完整构建作业时,脚本程序会针对它运行,将每个阶段作业工件拉入完整构建作业。通过这样做,我们可以永久保持完整的构建,而不会改变每个阶段作业的工件的生命周期(基本上“在整个构建中永久保留此构建”,忽略阶段作业中设置的生命周期。

我们还希望将这些工件提取到部署作业中。我们的想法是,我们可以将部署作业指向完整版本,它将提取我们指定的工件。如果提升了完整版本,则此脚本将直接从完整构建作业中提取工件,否则,它将从内部阶段作业中提取它们。由于我们有2个可与MultiJobs配合使用的脚本,因此我希望能够在它们之间共享此代码。

该脚本将采用MultiJob名称和内部版本号,并返回单个阶段作业的内部版本号,构建状态和工件信息。

1 个答案:

答案 0 :(得分:1)

这可以使用Groovy功能,但我不知道Scripler是否直接支持它。如果您在主节点上运行,则可以使用Groovy evaluate。 Scriptler脚本作为Groovy文件存储在$JENKINS_HOME/scriptler/scripts目录中主节点的文件系统上。 Scripter ID是该目录中的函数名称。

这是一个非常简单的例子。它使用两个文件。第一个是参数化函数findByScm.groovy,它使用给定源控件类型查找作业。第二个脚本findByGitScm.groovy将评估Git SCM的第一个函数并打印结果。

<强> findByScm.groovy

import jenkins.model.*

jenkins = Jenkins.instance;

// Notice that myScmType is not defined in this function
scmJobs = jenkins.items
    .findAll { job -> job.scm != null && job.scm.type == myScmType }

<强> findByGitScm.groovy

// This is supplying the argument to findByScm.groovy
myScmType = 'hudson.plugins.git.GitSCM'

// Now we are evaluating the script
evaluate(new File("${System.getProperty('JENKINS_HOME')}/scriptler/scripts/findByScm.groovy"))

// scmJobs is a variable which was introduced in findByScm.groovy
scmJobs.each { println it }