Convalidando i moduli del plug -in Jenkins con Ruby
-
11-11-2019 - |
Domanda
Sto sviluppando un plugin Jenkins in Ruby. Dovresti essere in grado di configurare ogni nodo che si collega al server in modo che un'e -mail venga inviata a un indirizzo specificato quando il nodo perde la sua connessione al master. EmailNodeProperty
Aggiunge un campo per inserire un indirizzo email:
#
# 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
Quando si configura un nodo, c'è un campo chiamato email
dove è possibile inserire un indirizzo email. Voglio che questo campo venga convalidato quando si inserisce un indirizzo.
Quando si salva la configurazione, un EmailNodeProperty
viene creato da dove (è giusto) puoi accedere all'indirizzo e -mail.
MyComputerListener
'S offline
viene chiamato quando un nodo perde la sua connessione:
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
Trova l'indirizzo e -mail e invia un'e -mail.
Qualcuno sa se è possibile convalidare il modulo in Ruby? Secondo il Jenkins Wiki, questo è ciò che dovrebbe essere implementato (il campo dovrebbe essere scambiato con il nome del campo, quindi immagino che dovrebbe essere doCheckEmail
):
public FormValidation doCheckFIELD(@QueryParameter String value) {
if(looksOk(value))
return FormValidation.ok();
else
return FormValidation.error("There's a problem here");
}
Come lo faresti a Ruby? Dove dovrebbe essere implementato il metodo? In EmailNodeProperty
o in MyComputerListener
? Come gestisci il queryParameter? @ Lo renderebbe una variabile intstance in Ruby. (Cos'è un queryparameter?)
Qualsiasi aiuto sarebbe molto apprezzato!
/Jonatan
Nessuna soluzione corretta