Estoy desarrollando un plugin de Jenkins en Ruby. Se supone que debe poder configurar cada nodo que se conecta al servidor para que se envíe un correo electrónico a una dirección específica cuando el nodo pierde su conexión con el maestro. EmailNodeProperty
añade un campo para introducir una dirección de correo electrónico:Validación de formularios de plugins de Jenkins con Ruby
#
# 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
Al configurar un nodo, hay un campo denominado email
donde se puede introducir una dirección de correo electrónico. Quiero que este campo sea validado cuando ingresas una dirección.
Al guardar la configuración, se crea un EmailNodeProperty
desde donde (es correcto) puede acceder a la dirección de correo electrónico.
MyComputerListener
's offline
se llama cuando un nodo pierde su conexión:
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
encuentra la dirección de correo electrónico y envía un correo electrónico.
¿Alguien sabe si es posible validar el formulario en Ruby? De acuerdo con la Jenkins wiki, esto es lo que se supone que debe ser implementado (se supone campo para ser cambiado por el nombre del campo, así que supongo que debe ser doCheckEmail
):
public FormValidation doCheckFIELD(@QueryParameter String value) {
if(looksOk(value))
return FormValidation.ok();
else
return FormValidation.error("There's a problem here");
}
¿cómo hacer esto en Ruby? ¿Dónde debería implementarse el método? En EmailNodeProperty
o en MyComputerListener
? ¿Cómo se maneja el QueryParameter? El @ lo convertiría en una variable de intstance en Ruby. (¿Qué es un parámetro Query?)
¡Cualquier ayuda sería muy apreciada!
/Jonatan