2016-04-04 23 views
18

Sto provando a creare un progetto di multi-configurazione che testa un mucchio di build che definiscono una matrice di compatibilità (ad esempio per browser e os). Vorrei definire i passaggi per una singola combinazione tramite Jenkinsfile.Utilizzo di progetti di multi-configurazione con Jenkinsfile (build plug-in pipeline)

Come posso ottenere questo risultato? Posso creare una configurazione parametrizzata della pipeline che dipende da JenkinsFile ma non riesco a capire come collegarlo alla build multi-configurazione.

+0

Assegnare la taglia in genere significa accettare anche la risposta. – rbellamy

risposta

4

Non sembra possibile avere un Jenkinsfile come buildstep in un progetto di multi-configurazione. Un Jenkinsfile viene utilizzato in un lavoro Pipeline che è anche un tipo di lavoro e Jenkins non supporta (facile) la conversione tra tipi di lavoro. Oltre a ciò, un buildstep implica che venga eseguito su un nodo particolare in uno slot executor. Un Jenkinsfile tuttavia viene valutato sul master e definisce sé stessi buildsteps (con le relative etichette di nodo) che sarebbero intrinsecamente in conflitto se fosse stato eseguito in un buildstep stesso.

È possibile attivare una pipeline tramite un processo di configurazione multipla e fornirla con i parametri del lavoro di configurazione multipla. (Ho anche usato il plugin grilletto parametrizzato per fare questo)

Il mio lavoro gasdotto ha due parametri di testo, label e version con un esempio Jenkinsfile che assomiglia a questo:

node(this.label){ 
    println this.version 
} 

Il mio lavoro multi-configurazione ha il seguente configurazione:

  • una consuetudine asse version con valori alpha beta gamma e uno slave asse label con un nodo selezionato
  • Il buildstep "Trigger/chiamata si basa su altri progetti" per far scattare il mio lavoro pipeline con parametri predefiniti version=${version} e label=${label}

Questa configurazione porta al lavoro gasdotto essere chiamato 3 volte (come ho solo nodo selezionato) , ogni volta con una versione diversa e in esecuzione sulla mia etichetta specificata. Ecco uno dei tronchi:

[Pipeline] node 
Running on master in /var/lib/jenkins/jobs/pipelinejob/workspace 
[Pipeline] { 
[Pipeline] echo 
gamma 
[Pipeline] } 
[Pipeline] // node 
[Pipeline] End of Pipeline 
Finished: SUCCESS 

Questa soluzione funziona se desideri solo per passare parametri a base di testo o nomi delle etichette. Sarà molto più complicato da usare se si vuole fare qualcosa come "costruire con jdks diversi". Spero che sia comunque utile.