Как вызвать трубопровод Дженкинса 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")
]
}
}
В моем случае это решило проблему.