首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Groovy脚本失败,系统groovy

Groovy脚本失败,系统groovy
EN

Stack Overflow用户
提问于 2020-11-05 22:58:06
回答 1查看 163关注 0票数 0

我正在尝试设置一个jenkins作业来监控Jenkins Slaves,它需要在slaves离线时发送一个带有原因的电子邮件通知。因此,我从下面的链接中获取了原始脚本。

https://www.jenkins.io/doc/book/managing/nodes/

但是当我试图在“脚本控制台”中运行脚本时,错误提示它需要在系统groovy上运行,而不是在Groovy DSL中运行。因此,我安装了Groovy插件,在Global Tools配置中更新了groovy版本,并运行了脚本。

代码语言:javascript
复制
import hudson.node_monitors.*
import hudson.slaves.*
import java.util.concurrent.*

jenkins = Jenkins.instance

import hudson.model.*;
import hudson.util.*;
import jenkins.model.*;
import hudson.filepath.*
import hudson.slaves.*
import javax.mail.*
import javax.mail.internet.*;
import javax.activation.*

def sendMail (agent, cause) {

 message = agent + " agent is down. Check https://jenkins.abc.com:8443/computer/" + agent + "\nBecause " + cause
 subject = agent + " agent is offline"
 toAddress = "abc@abc.com"
 fromAddress = "jenkins@abc.com"
 host = "smtp.abc.com"
 port = "25"

 Properties mprops = new Properties();
 mprops.setProperty("mail.transport.protocol","smtp");
 mprops.setProperty("mail.host",host);
 mprops.setProperty("mail.smtp.port",port);

 Session lSession = Session.getDefaultInstance(mprops,null);
 MimeMessage msg = new MimeMessage(lSession);


 //tokenize out the recipients in case they came in as a list
 StringTokenizer tok = new StringTokenizer(toAddress,";");
 ArrayList emailTos = new ArrayList();
 while(tok.hasMoreElements()) {
   emailTos.add(new InternetAddress(tok.nextElement().toString()));
 }
 InternetAddress[] to = new InternetAddress[emailTos.size()];
 to = (InternetAddress[]) emailTos.toArray(to);
 msg.setRecipients(MimeMessage.RecipientType.TO,to);
 InternetAddress fromAddr = new InternetAddress(fromAddress);
 msg.setFrom(fromAddr);
 msg.setFrom(new InternetAddress(fromAddress));
 msg.setSubject(subject);
 msg.setText(message)

 Transport transporter = lSession.getTransport("smtp");
 transporter.connect();
 transporter.send(msg);
}


def getEnviron(computer) {
   def env
   def thread = Thread.start("Getting env from ${computer.name}", { env = computer.environment })
   thread.join(2000)
   if (thread.isAlive()) thread.interrupt()
   env
}

def agentAccessible(computer) {
    getEnviron(computer)?.get('PATH') != null
}

def numberOfflineNodes = 0
def numberNodes = 0
for (agent in jenkins.getNodes()) {
   def computer = agent.computer
   numberNodes ++
   println ""
   println "Checking computer ${computer.name}:"
   def isOK = (agentAccessible(computer) && !computer.offline)
   if (isOK) {
     println "\t\tOK, got PATH back from slave ${computer.name}."
    // println('\tcomputer.isOffline: ' + slave.getComputer().isOffline());
     println('\tcomputer.isTemporarilyOffline: ' + slave.getComputer().isTemporarilyOffline());
     println('\tcomputer.getOfflineCause: ' + slave.getComputer().getOfflineCause());
     println('\tcomputer.offline: ' + computer.offline);
   } else {
     numberOfflineNodes ++
     println "  ERROR: can't get PATH from agent ${computer.name}."
    // println('\tcomputer.isOffline: ' + agent.getComputer().isOffline());
     println('\tcomputer.isTemporarilyOffline: ' + agent.getComputer().isTemporarilyOffline());
     println('\tcomputer.getOfflineCause: ' + agent.getComputer().getOfflineCause());
     println('\tcomputer.offline: ' + computer.offline);
     sendMail(computer.name, agent.getComputer().getOfflineCause().toString())
     if (agent.getComputer().isTemporarilyOffline()) {
       if (!agent.getComputer().getOfflineCause().toString().contains("Disconnected by")) {
         computer.setTemporarilyOffline(false, agent.getComputer().getOfflineCause())
       }
     } else {
         computer.connect(true)
     }
   }
 }
println ("Number of Offline Nodes: " + numberOfflineNodes)
println ("Number of Nodes: " + numberNodes) 

现在的结果是抛出了一些我无法解决的类错误。任何帮助都将不胜感激。

代码语言:javascript
复制
[Jenkins_Slaves_Offline_Notification] $ /u00/jenkins-agent/tools/hudson.plugins.groovy.GroovyInstallation/groovy-3-0-6/bin/groovy -cp scripts/groovy /u00/jenkins-agent/workspace/Corporate/Global-Tools/BA_Workspace_Cleanup/Jenkins_Slaves_Offline_Notification/jenkins_ba_offline_not.groovy
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
/u00/jenkins-agent/workspace/Corporate/Global-Tools/BA_Workspace_Cleanup/Jenkins_Slaves_Offline_Notification/jenkins_ba_offline_not.groovy: 31: unable to resolve class Session
@ line 31, column 10.
Session lSession = Session.getDefaultInstance(mprops,null);
^

/u00/jenkins-agent/workspace/Corporate/Global-Tools/BA_Workspace_Cleanup/Jenkins_Slaves_Offline_Notification/jenkins_ba_offline_not.groovy: 32: unable to resolve class MimeMessage
@ line 32, column 14.
MimeMessage msg = new MimeMessage(lSession);
^

/u00/jenkins-agent/workspace/Corporate/Global-Tools/BA_Workspace_Cleanup/Jenkins_Slaves_Offline_Notification/jenkins_ba_offline_not.groovy: 32: unable to resolve class MimeMessage
@ line 32, column 20.
MimeMessage msg = new MimeMessage(lSession);
^

/u00/jenkins-agent/workspace/Corporate/Global-Tools/BA_Workspace_Cleanup/Jenkins_Slaves_Offline_Notification/jenkins_ba_offline_not.groovy: 39: unable to resolve class InternetAddress
@ line 39, column 17.
emailTos.add(new InternetAddress(tok.nextElement().toString()));
^

/u00/jenkins-agent/workspace/Corporate/Global-Tools/BA_Workspace_Cleanup/Jenkins_Slaves_Offline_Notification/jenkins_ba_offline_not.groovy: 41: unable to resolve class InternetAddress[]
@ line 41, column 20.
InternetAddress[] to = new InternetAddress[emailTos.size()];
^

/u00/jenkins-agent/workspace/Corporate/Global-Tools/BA_Workspace_Cleanup/Jenkins_Slaves_Offline_Notification/jenkins_ba_offline_not.groovy: 41: unable to resolve class InternetAddress[]
@ line 41, column 25.
InternetAddress[] to = new InternetAddress[emailTos.size()];
^

/u00/jenkins-agent/workspace/Corporate/Global-Tools/BA_Workspace_Cleanup/Jenkins_Slaves_Offline_Notification/jenkins_ba_offline_not.groovy: 42: unable to resolve class InternetAddress[]
@ line 42, column 7.
to = (InternetAddress[]) emailTos.toArray(to);
^

/u00/jenkins-agent/workspace/Corporate/Global-Tools/BA_Workspace_Cleanup/Jenkins_Slaves_Offline_Notification/jenkins_ba_offline_not.groovy: 44: unable to resolve class InternetAddress
@ line 44, column 18.
InternetAddress fromAddr = new InternetAddress(fromAddress);
^

/u00/jenkins-agent/workspace/Corporate/Global-Tools/BA_Workspace_Cleanup/Jenkins_Slaves_Offline_Notification/jenkins_ba_offline_not.groovy: 44: unable to resolve class InternetAddress
@ line 44, column 29.
InternetAddress fromAddr = new InternetAddress(fromAddress);
^

/u00/jenkins-agent/workspace/Corporate/Global-Tools/BA_Workspace_Cleanup/Jenkins_Slaves_Offline_Notification/jenkins_ba_offline_not.groovy: 46: unable to resolve class InternetAddress
@ line 46, column 14.
msg.setFrom(new InternetAddress(fromAddress));
^

/u00/jenkins-agent/workspace/Corporate/Global-Tools/BA_Workspace_Cleanup/Jenkins_Slaves_Offline_Notification/jenkins_ba_offline_not.groovy: 50: unable to resolve class Transport
@ line 50, column 12.
Transport transporter = lSession.getTransport("smtp");
^

11 errors

Build step 'Execute Groovy script' marked build as failure
Collecting metadata...
Metadata collection done.
Finished: FAILURE
EN

回答 1

Stack Overflow用户

发布于 2020-11-16 21:46:55

已通过将javax.mail jar文件放置在groovy库中解决此问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64699739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档