如何在Jenkins groovy后期构建插件中重用groovy脚本?

如何在Jenkins groovy后期构建插件中重用groovy脚本?,jenkins,groovy,Jenkins,Groovy,我有一些groovy代码,我计划在Jenkins groovy多任务后期构建插件中重用这些代码。我怎样才能做到这一点?是否有一个地方可以将脚本存储在全局变量中,并在需要的作业中调用它?您可以在groovy后期构建中加载Jenkins master上的任何groovy文件并执行它。例如,您可以在c驱动器上有一个特殊的目录,其中包含所有常用脚本。稍后,我将使用一些代码更新我的答案,这些代码将向您展示如何加载脚本 更新 假设您的C:驱动器上有一个test.groovy文件,那么在groovy Post

我有一些groovy代码,我计划在Jenkins groovy多任务后期构建插件中重用这些代码。我怎样才能做到这一点?是否有一个地方可以将脚本存储在全局变量中,并在需要的作业中调用它?

您可以在groovy后期构建中加载Jenkins master上的任何groovy文件并执行它。例如,您可以在c驱动器上有一个特殊的目录,其中包含所有常用脚本。稍后,我将使用一些代码更新我的答案,这些代码将向您展示如何加载脚本

更新

假设您的C:驱动器上有一个test.groovy文件,那么在groovy Postbuild中,它应该像下面一样简单:

evaluate(new File("C:\\test.groovy"))

请查看的评论部分,了解更多示例和其他可能的方式。

以下是对我有效的解决方案:

  • 为Jenkins安装了Scriptler插件,并在其中保存了Groovy脚本。现在,脚本可以在
    JENKINS_HOME/scriptler/scripts
    目录中找到。这样我们可以避免手动将文件复制到Jenkins master
  • 在后期生成中使用groovy文件:
  • def env=manager.build.getEnvironment(manager.listener)evaluate(新文件(env['JENKINS\u HOME']+“\\scriptler\\scripts\\GroovyForPostBuild.groovy”)
    这是以下文件的副本:

    如果希望将Groovy脚本放在代码存储库中,并加载到工作区中的构建/测试从机上,那么需要注意Groovy Postbuild在主机上运行

    对于我们来说,主服务器是Unix服务器,而构建/测试从属服务器是本地网络上的Windows PC。因此,在使用脚本之前,我们必须打开一个从主机到从机的通道,并使用一个到文件的通道

    以下几点对我们起了作用:

    // Get an Instance of the Build object, and from there
    // the channel from the Master to the Workspace
    build = Thread.currentThread().executable
    channel = build.workspace.channel;
    
    // Open a FilePath to the script
    fp = new FilePath(channel, build.workspace.toString() + "<relative path to the script in Unix notation>")
    
    // Some have suggested that the "Not NULL" check is redundant
    // I've kept it for completeness
    if(fp != null)
    {
        // 'Evaluate' requires a string, so read the file contents to a String
        script = fp.readToString();
        // Execute the script
        evaluate(script);
    } 
    
    //获取Build对象的实例,然后从中
    //从主机到工作区的通道
    build=Thread.currentThread()可执行文件
    通道=build.workspace.channel;
    //打开脚本的文件路径
    fp=新文件路径(通道,build.workspace.toString()+“”)
    //有些人认为“NOTNULL”检查是多余的
    //我保存它是为了完整
    如果(fp!=null)
    {
    //“Evaluate”需要字符串,因此将文件内容读取为字符串
    script=fp.readToString();
    //执行脚本
    评估(脚本);
    } 
    
    比你更重要。这个解决方案帮了我一半。以下是我为使其成为一个完整的解决方案所做的工作:我认为您的评论被截断了,因为我没有看到解决方案。。如果您愿意,您可以将您的解决方案添加为另一个答案,然后将其作为问题的最终解决方案。。这可能会帮助其他人。如果我的回答对你有帮助,请随意投票