Как вызвать трубопровод Дженкинса A в другом трубопроводе для дженкинсов B

У меня есть два трубопровода Дженкинса, скажем, трубопровод-A и трубопровод-B. Я хочу вызвать трубопровод-A в трубопровод-B. Как я могу это сделать?

(pipe-A - это подмножество pipe-B. Pipeline-A отвечает за выполнение некоторых рутинных операций, которые можно повторно использовать в pipe-B)

Я установил Jenkins 2.41 на мою машину.

Ответ 1

Следующее решение работает для меня:

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

Ответ 2

Немного неясно, хотите ли вы ссылаться на сценарий или работу другого сценария, поэтому я отвечаю на оба:

Сценарий трубопровода Шаг "load" выполнит другой сценарий конвейера. Если у вас есть оба сценария в одном каталоге, вы можете загрузить его следующим образом:

def pipelineA = load "pipeline_A.groovy"
pipelineA.someMethod()

Другой скрипт (pipe_a.groovy):

def someMethod() {
    //do something
}

return this

Трубопроводная работа

Если вы говорите о выполнении другого задания на конвейер, шаг "build job" может выполнить следующее:

build job: '<Project name>', propagate: true, wait: true

распространять: распространять ошибки

wait: Подождите завершения

Если у вас есть параметры работы, вы можете добавить их следующим образом:

build job: '<Project name>', parameters: [[$class: 'StringParameterValue', name: 'param1', value: 'test_param']]

Ответ 3

Чтобы добавить к тому, что сказал @matias-snellingen. Если у вас несколько функций, return this должно находиться под функцией, которая будет вызываться в сценарии основного конвейера. Например, в:

def someMethod() {
   helperMethod1() 
   helperMethod2()
} 
return this 

def helperMethod1(){ 
   //do stuff
} 

def helperMethod2(){
  //do stuff
}

someMethod() - тот, который будет вызываться в сценарии основного конвейера

Ответ 4

Другой вариант - создать пакет, загрузить его и выполнить из пакета.

package name.of.package
import groovy.json.*

def myFunc(var1) {
return result
}

Чем потреблять это

@Library('name_of_repo')
import name.of.package.* 
utils = new name_of_pipeline()
// here you can invoke
utils.myFunc(var)

Надеюсь, поможет

Ответ 5

Как упомянули @Matias Snellingen и @Céline Aussourd, в случае запуска многоотраслевого задания вы должны указать ветвь для построения следующим образом:

stage ('Invoke_pipeline') {
    steps {
        build job: 'pipeline1/master', parameters: [
        string(name: 'param1', value: "value1")
        ]
    }
}

В моем случае это решило проблему.