2012-02-23 7 views
8

Sto sviluppando un plug-in Jenkins in Ruby. Dovresti essere in grado di configurare ogni nodo che si connette al server in modo che un messaggio di posta elettronica venga inviato a un indirizzo specificato quando il nodo perde la connessione al master. EmailNodeProperty aggiunge un campo per inserire un indirizzo email:Convalida dei moduli di plugin 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 

Quando si configura un nodo, c'è un campo denominato email in cui è possibile inserire un indirizzo e-mail. Voglio che questo campo venga convalidato quando inserisci un indirizzo.

Quando si salva la configurazione, viene creato uno EmailNodeProperty da cui (è vero) è possibile accedere all'indirizzo di posta elettronica.

MyComputerListener 's offline viene chiamato quando un nodo perde la 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 email e invia una e-mail.

Qualcuno sa se è possibile convalidare il modulo in Ruby? Secondo il Jenkins wiki, questo è quello che dovrebbe essere attuata (si suppone campo per essere scambiati con il nome del campo, quindi credo 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 faresti questo in Ruby? Dove dovrebbe essere implementato il metodo? In EmailNodeProperty o in MyComputerListener? Come gestisci QueryParameter? @ Lo renderebbe una variabile di intstance in Ruby. (Che cos'è un Queryparameter?)

Qualsiasi aiuto sarebbe molto apprezzato!

/Jonatan

risposta

1

Questo semplicemente non esiste oggi, e noi male necessario aggiungerlo. Questo è già stato sollevato un paio di volte in Thursday morning's hack session, quindi è in cima all'elenco TODO. Ma a partire da ruby-runtime plugin 0.10, questo non è possibile. Mi dispiace di deluderti.