Saya memiliki dua Jenkins pipa, let's mengatakan pipa A dan pipa B. saya ingin memohon pipa-A di pipa-B. Bagaimana saya bisa melakukan ini?
(pipa-A adalah subset dari pipa-B. Pipa-Yang bertanggung jawab untuk melakukan beberapa hal-hal rutin yang dapat digunakan kembali dalam pipa-B)
Saya telah menginstal Jenkins 2.41 di mesin saya.
Sedikit tidak jelas jika anda ingin memanggil yang lain pipa script atau pekerjaan, jadi aku menjawab kedua:
Pipa script "beban" langkah akan mengeksekusi lainnya pipa script. Jika anda memiliki kedua script di direktori yang sama, anda dapat memuat seperti ini:
def pipelineA = load "pipeline_A.groovy"
pipelineA.someMethod()
Lainnya script (pipeline_a.groovy):
def someMethod() {
//do something
}
return this
Pipa pekerjaan
Jika anda berbicara tentang mengeksekusi lain pipa pekerjaan, "membangun pekerjaan" langkah dapat mencapai hal ini:
build job: '<Project name>', propagate: true, wait: true
menyebarkan: Menyebarkan kesalahan
menunggu: Menunggu penyelesaian
Jika anda memiliki paramters pada pekerjaan, anda dapat menambahkan mereka seperti ini:
build job: '<Project name>', parameters: [[$class: 'StringParameterValue', name: 'param1', value: 'test_param']]
Berikut solusi yang bekerja untuk saya:
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'
}
}
}
}
Untuk menambah apa yang @matias-snellingen kata. Jika anda memiliki beberapa fungsi, kembali
ini harus di bawah fungsi yang akan dipanggil dalam pipa utama script. Misalnya di :
def someMethod() {
helperMethod1()
helperMethod2()
}
return this
def helperMethod1(){
//do stuff
}
def helperMethod2(){
//do stuff
}
The someMethod()
adalah salah satu yang akan dipanggil dalam pipa utama script
Pilihan lain adalah untuk membuat paket, beban itu dan menjalankannya dari paket.
package name.of.package
import groovy.json.*
def myFunc(var1) {
return result
}
Daripada mengkonsumsi
@Library('name_of_repo')
import name.of.package.*
utils = new name_of_pipeline()
// here you can invoke
utils.myFunc(var)
semoga membantu
Seperti yang disebutkan oleh @Matias Snellingen dan @Céline Aussourd, dalam kasus meluncurkan multibranch pekerjaan yang anda miliki untuk menentukan cabang untuk membangun seperti ini :
stage ('Invoke_pipeline') {
steps {
build job: 'pipeline1/master', parameters: [
string(name: 'param1', value: "value1")
]
}
}
Dalam kasus saya itu memecahkan masalah.