我的 Jenkins Pipeline 脚本有问题。WorkFlowScript 类没有此类属性

pet*_*ndr 5 groovy jenkins jenkins-pipeline

当我创建新作业时,詹金斯会通过所有团队的电子邮件发送该作业的结果,但是当我们创建测试作业(我们可以通过作业名称来理解它)时,我们应该仅向作业创建者发送电子邮件。事情就是这样,而且有效:

pipe(..){
 timeout(..){
  BuildEmailExt email = new BuilEmailExt(this, Emails.allTeams())
  someCode..
  }
}
Run Code Online (Sandbox Code Playgroud)

然后我添加如果:

  pipe(..){
   timeout(..){
   if(env.JOB_NAME =~ /somePattern/){
    BuildEmailExt email = new BuilEmailExt(this, SENDER)
   }
   else{
    BuildEmailExt email = new BuilEmailExt(this, Emails.allTeams())
   }
   someCode..
  }
}
Run Code Online (Sandbox Code Playgroud)

我得到异常:没有类的此类属性电子邮件:WorkFlowScript 我做错了什么?

tim*_*tes 6

if通过在and内部定义变量else,它不存在于该范围之外,因此无法在条件之外访问。

您可以将定义移到 if 之外,然后像这样设置:

pipe(..){
    timeout(..){
        BuildEmailExt email
        if(env.JOB_NAME =~ /somePattern/){
            email = new BuilEmailExt(this, SENDER)
        }
        else {
            email = new BuilEmailExt(this, Emails.allTeams())
        }
        someCode..
    }
}
Run Code Online (Sandbox Code Playgroud)

你也可以这样做,这可能看起来更干净(ymmv)

pipe(..){
    timeout(..){
        BuildEmailExt email = new BuilEmailExt(this, (env.JOB_NAME =~ /somePattern/) ? SENDER : Emails.allTeams())
        someCode..
    }
}
Run Code Online (Sandbox Code Playgroud)