我正在用 Ruby 开发一个 Jenkins 插件。您应该能够配置连接到服务器的每个节点,以便在该节点失去与主服务器的连接时将电子邮件发送到指定的地址。EmailNodeProperty
添加一个字段来输入电子邮件地址:
#
# Save an email property for every node
#
class EmailNodeProperty < Jenkins::Slaves::NodeProperty
require 'java'
import 'hudson.util.FormValidation'
display_name "Email notification"
attr_accessor :email
def initialize(attrs = {})
@email = attrs['email']
end
def doCheckEmail value
puts " ENP.doCheckEmail:#{value}"
end
end
当你配置一个节点时,有一个名为email
您可以在其中输入电子邮件地址。我希望在您输入地址时验证此字段。
保存配置时,会出现一个EmailNodeProperty
创建后(没错)您可以访问电子邮件地址。
MyComputerListener
's offline
当节点失去连接时被调用:
class MyComputerListener
include Jenkins::Slaves::ComputerListener
include Jenkins::Plugin::Proxy
def online(computer, listener)
end
def offline(computer)
#Do nothing when the Master shuts down
if computer.to_s.match('Master') == nil
list = computer.native.getNode().getNodeProperties()
proxy = list.find {"EmailNodeProperty"}
if proxy.is_a?(Jenkins::Plugin::Proxy)
rubyObject = proxy.getTarget()
email = rubyObject.email #<= Accesses the email from EmailNodeProperty
[...]
end
end
end
end
MyComputerListener
找到电子邮件地址并发送电子邮件。
有谁知道是否可以用 Ruby 验证表单?根据詹金斯维基 https://wiki.jenkins-ci.org/display/JENKINS/Basic+guide+to+Jelly+usage+in+Jenkins,这就是应该实现的(FIELD应该被交换为字段名称,所以我想它应该是doCheckEmail
):
public FormValidation doCheckFIELD(@QueryParameter String value) {
if(looksOk(value))
return FormValidation.ok();
else
return FormValidation.error("There's a problem here");
}
你会如何在 Ruby 中做到这一点?该方法应该在哪里实现?在EmailNodeProperty
or in MyComputerListener
?您如何处理查询参数? @ 会使其成为 Ruby 中的实例变量。 (什么是查询参数?)
任何帮助将非常感激!
/Jonatan