J'ai deux pipelines Jenkins, disons pipeline A et pipeline B. Je veux appeler pipeline-A dans pipeline-B. Comment puis-je faire ceci?
(pipeline-A est un sous-ensemble de pipeline-B. Pipeline-A est responsable de la réalisation de tâches de routine pouvant être réutilisées dans le pipeline-B)
J'ai installé Jenkins 2.41 sur ma machine.
La solution suivante fonctionne pour moi:
pipeline {
agent
{
node {
label 'master'
customWorkspace "${env.JobPath}"
}
}
stages
{
stage('Start') {
steps {
sh 'ls'
}
}
stage ('Invoke_pipeline') {
steps {
build job: 'pipeline1', parameters: [
string(name: 'param1', value: "value1")
]
}
}
stage('End') {
steps {
sh 'ls'
}
}
}
}
Un peu incertain si vous voulez appeler un autre script de pipeline ou un autre travail, alors je réponds à la fois:
Script de pipeline L'étape "load" exécutera l'autre script de pipeline. Si vous avez les deux scripts dans le même répertoire, vous pouvez le charger comme suit:
def pipelineA = load "pipeline_A.groovy"
pipelineA.someMethod()
Autre script (pipeline_a.groovy):
def someMethod() {
//do something
}
return this
travail de pipeline
Si vous parlez d'exécuter un autre travail de pipeline, l'étape "Travail de génération" peut accomplir ceci:
build job: '<Project name>', propagate: true, wait: true
propager: propager les erreurs
wait: attend la fin
Si vous avez des paramètres au travail, vous pouvez les ajouter comme ceci:
build job: '<Project name>', parameters: [[$class: 'StringParameterValue', name: 'param1', value: 'test_param']]
Pour ajouter à ce que @ matias-snellingen a dit. Si vous avez plusieurs fonctions, le return this
Doit se trouver sous la fonction qui sera appelée dans le script de pipeline principal. Par exemple dans:
def someMethod() {
helperMethod1()
helperMethod2()
}
return this
def helperMethod1(){
//do stuff
}
def helperMethod2(){
//do stuff
}
La someMethod()
est celle qui sera appelée dans le script de pipeline principal
Une autre option consiste à créer un package, à le charger et à l'exécuter à partir du package.
package name.of.package
import groovy.json.*
def myFunc(var1) {
return result
}
Que le consommer
@Library('name_of_repo')
import name.of.package.*
utils = new name_of_pipeline()
// here you can invoke
utils.myFunc(var)
j'espère que ça aide