パイプラインAとパイプラインBの2つのJenkinsパイプラインがあります。パイプラインBでパイプラインAを呼び出したい。これどうやってするの?
(パイプラインAはパイプラインBのサブセットです。パイプラインAは、パイプラインBで再利用できるいくつかの日常的な作業を行う責任があります)
マシンにJenkins 2.41をインストールしました。
次の解決策は私のために働いています:
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'
}
}
}
}
別のパイプラインスクリプトまたはジョブを呼び出すかどうかが少し不明なので、両方に答えます。
パイプラインスクリプト「ロード」ステップは、他のパイプラインスクリプトを実行します。同じディレクトリに両方のスクリプトがある場合、次のようにロードできます。
def pipelineA = load "pipeline_A.groovy"
pipelineA.someMethod()
その他のスクリプト(pipeline_a.groovy):
def someMethod() {
//do something
}
return this
パイプラインジョブ
別のパイプラインジョブの実行について話している場合、「ジョブのビルド」ステップでこれを実現できます。
build job: '<Project name>', propagate: true, wait: true
propagate:エラーを伝播します
wait:完了を待ちます
ジョブにパラメーターがある場合は、次のように追加できます。
build job: '<Project name>', parameters: [[$class: 'StringParameterValue', name: 'param1', value: 'test_param']]
@ matias-snellingenが言ったことに追加します。複数の関数がある場合、return this
はメインパイプラインスクリプトで呼び出される関数の下にある必要があります。例えば:
def someMethod() {
helperMethod1()
helperMethod2()
}
return this
def helperMethod1(){
//do stuff
}
def helperMethod2(){
//do stuff
}
someMethod()
は、メインパイプラインスクリプトで呼び出されるものです
別のオプションは、パッケージを作成してロードし、パッケージから実行することです。
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)
それが役に立てば幸い