2

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

其他人遇到这个并解决它吗?有没有标准的方法来执行这个脚本(不调用 Jenkins REST API)来执行脚本?

更多详细信息 我们有一个完整的构建 MultiJob,其中包含许多阶段作业,每个都有自己的工件,并有 3 天的时间来处理它们。当提升这个完整的构建作业时,脚本程序会针对它运行,将每个阶段作业工件拉入完整的构建作业。通过这样做,我们可以使完整构建永远保持活动状态,而无需更改每个阶段作业的工件的生命周期(本质上是在完整构建上“永远保持此构建”,忽略阶段作业中设置的生命周期。

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

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

4

1 回答 1

1

这可以使用 Groovy 功能​​,但我不知道 Scripler 是否直接支持它。如果您在主节点上运行,则可以使用 Groovy评估。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 }
于 2016-06-02T14:40:18.443 回答