是否可以从 Jenkins 脚本控制台发送电子邮件?

Яoi*_*ois 2 groovy continuous-integration jenkins jenkins-cli

为了在新的 Jenkins 实例中自动注册用户,我生成了一个Groovy脚本:

// Automatically generated groovy script -- 1463047124
jenkins.model.Jenkins.instance.securityRealm.createAccount("username", "NGRkOGJiNGE2NDEyMTExMDI0OGZmOWNj")
def user = hudson.model.User.get("username");
def userEmail = "username@domain.com";
user.addProperty(new hudson.tasks.Mailer.UserProperty(userEmail)); 
Run Code Online (Sandbox Code Playgroud)

然后我可以将它粘贴到 Jenkins 脚本控制台或通过 Jenkins CLI 运行它,它会创建用户。

我想添加到此设置的下一件事是能够通过电子邮件通知新用户他们的帐户已创建。我怀疑这可以完成,因为“邮件程序”安装在我的 Jenkins 实例中。例如,使用流行的流水线即代码,我可以添加到我的 Jenkinsfile 中:

mail (to: "user@userland.com",
        subject: "Jenkins says",
        body: "No"); 
Run Code Online (Sandbox Code Playgroud)

它会发送它。但是,这无法在 CLI 或脚本控制台中重现。甚至有可能做到这一点吗?

luk*_*a5z 6

您可以尝试在 Groovy 脚本中使用类似 Java 的代码:

import javax.mail.*
import javax.mail.internet.*


def sendMail(host, sender, receivers, subject, text) {
    Properties props = System.getProperties()
    props.put("mail.smtp.host", host)
    Session session = Session.getDefaultInstance(props, null)

    MimeMessage message = new MimeMessage(session)
    message.setFrom(new InternetAddress(sender))
    receivers.split(',').each {
        message.addRecipient(Message.RecipientType.TO, new InternetAddress(it))
    }
    message.setSubject(subject)
    message.setText(text)

    println 'Sending mail to ' + receivers + '.'
    Transport.send(message)
    println 'Mail sent.'
}
Run Code Online (Sandbox Code Playgroud)

用法示例:

sendMail('mailhost', messageSender, messageReceivers, messageSubject, messageAllText)
Run Code Online (Sandbox Code Playgroud)