[英]Groovy script failing with system groovy
我正在嘗試設置一個 jenkins 作業來監視 Jenkins Slaves,並且它需要在奴隸離線時發送帶有原因的電子郵件通知。 所以我從下面的鏈接中獲取了原始腳本。
https://www.jenkins.io/doc/book/managing/nodes/
但是當我嘗試在“腳本控制台”中運行腳本時,錯誤表明它需要在系統 groovy 上運行,而不是在 Groovy DSL 中運行。 所以我安裝了 Groovy 插件並更新了全局工具配置中的 groovy 版本並運行了腳本。
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)
現在的結果是拋出一些我無法弄清楚的類錯誤。 任何幫助將非常感激。
[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
通過將 javax.mail jar 文件放在 groovy 庫中解決了問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.