web-dev-qa-db-fra.com

Comment appeler un pipeline Jenkins A dans un autre pipeline B Jenkins

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.

43
Yash

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'
            }
        }
    }
}
31
Yash

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']]
42
Matias Snellingen

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

1
papigee

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

0
IsaacE