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 中调用它时它不起作用。
为什么?有人可以帮助我吗?我真的被困住了。
您正在将脚本作为新的 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)