Groovy PostBuild 的名为“manager”的对象在我在 Jenkinsfile 的一个阶段中调用的 groovy 脚本中无法访问

问题描述 投票:0回答:1
node(NODE){
stages {
        stage('first') {
            steps {
                checkout scm
            }
        }
        stage('run myScript'){
           sh "groovy folderName/myScript"
       }

    }

}

myScript.groovy 看起来像:

class MyScript{
  static{
    //initializing some varibles
  }
  public static void main(String[] args){
    //logic to do some task
    // the logic populates a arraylist which I want to print on build page using 'manager' object //by PostBuild
     def summary_manager = manager.createSummary("green_anime.gif");
     manager.addShortText("Blocked: $num");
     summary_manager.appendText("<h3>Number of Blocked Users: $num</h3>", false);
  }
}

但是我无法访问脚本内的对象管理器。 我尝试将它作为参数传递给 jenkins 文件中的 groovy 脚本

sh "groovy folderName/myScript ${manager}"

当我在 myScript 中尝试打印参数时,它打印出它确实是我正在寻找的管理器对象的对象,但是当我调用以下方法时:

manager.createSummary("dfd.gif);

它说找不到该方法的适当方法签名。

虽然当我在任何一个阶段在 Jenkinsfile 本身中调用此方法时这都有效,但当我尝试在 myScript.groovy 中调用它时它不起作用。

为什么?有人可以帮助我吗?我真的被困住了。

jenkins groovy jenkins-pipeline jenkins-plugins jenkins-groovy
1个回答
0
投票

您正在将脚本作为新的 Shell 进程执行。因此它运行在不同的 Groovy 运行时上,并且无法访问管道中的对象。因此,请尝试将脚本加载到 Pipeline,然后执行它。

脚本

def createSummary(def manager) {
     def summary_manager = manager.createSummary("green_anime.gif");
     manager.addShortText("Blocked: $num");
     summary_manager.appendText("<h3>Number of Blocked Users: $num</h3>", false);
}

return this;

管道

def scriptObj = load "groovy folderName/myScript.groovy"
scriptObj.createSummary(manager)
© www.soinside.com 2019 - 2024. All rights reserved.