2016-07-27 1 views
1

J'ai un pipeline, p1, configuré avec 3 paramètres, param1 comme ChoiceParam, et param2 et param3 comme runParameters, qui récupèrent différents id-builds pour les passer en versions.Exécution du pipeline Jenkins depuis l'intérieur du DSL

J'ai aussi un autre pipeline, p2, à partir duquel je voudrais lancer p1. p2 a également les mêmes paramètres configurés, donc, à l'intérieur de la DSL, j'ai besoin d'appeler p1 avec params1, params2, params3, car les paramètres devraient être hérités en p2

Mais je suis incapable, comme je l'ai essayé de toute façon je peux penser. Quelqu'un peut-il m'aider?

p2: 
build() { 
    job('p1') 
    parameters([[$class:'StringParameterValue', name:'param1', value:${param1}], 
       [$class:'StringParameterValue', name:'param2', value:${param2}], 
       [$class:'StringParameterValue', name:'param3', value:${param3}] 
    ]) 
} 

Puis, a également essayé

p2: 
build(job:'p1', parameters: ([[$class:'StringParameterValue', name:'param1', value:${param1}], 
      [$class:'StringParameterValue', name:'param2', value:${param2}], 
      [$class:'StringParameterValue', name:'param3', value:${param3}] 
])) 

sans succès. Toute aide, s'il vous plaît?

Répondre

1

Avez-vous vraiment besoin de définir p1 comme un travail séparé complet? Je ne pense pas que ce soit une bonne pratique d'enchaîner les emplois dans les pipelines, comme nous le faisions avec les emplois freestyle. À la place, vous devriez probablement charger un autre fichier de pipeline contenant vos tâches p1, puis appeler simplement la fonction p1 de p2. Voici a good example from the doc.

Fondamentalement, ce que vous devez faire est de définir votre p1 en tant que fichier pipeline p1.groovy:

def p1Actions(param1, param2, param3) { 
    // Do whatever p1 does with your 3 params 
} 

return this; 

Et puis simplement l'appeler de p2:

pipeline = load 'p1.groovy' 
pipeline.p1Actions() 

Et si vous voulez p1 à être réutilisable d'autres travaux que p2, il suffit de le pousser dans son propre dépôt SCM, et il suffit d'ajouter un contrôle SCM à l'exemple précédent, juste avant de charger le script. En passant, cette étape est également très bien couverte in the documentation.