別のjenkinsパイプラインBでjenkinsパイプラインAを呼び出す方法

パイプラインAとパイプラインBとします。pipeline-Bでpipeline-Aを起動したい。どうすればいいですか?

(pipeline-Aはpipeline-Bのサブセットです。パイプラインAはパイプラインBのサブセットです。)

私のマシンにJenkins 2.41をインストールしました。

質問へのコメント (1)

別のパイプライン・スクリプトを呼び出すのか、ジョブを呼び出すのかが少し不明なので、両方お答えします:

**パイプラインスクリプト quot;load"ステップは、もう一方のパイプラインスクリプトを実行します。両方のスクリプトが同じディレクトリにある場合は、次のようにロードします:

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

もう一方のスクリプト(pipeline_a.groovy):

def someMethod() {
    //do something
}

return this

パイプラインジョブ

別のパイプライン・ジョブの実行について話している場合、 quot;ビルドジョブ"ステップで実行できます:

build job: '', propagate: true, wait: true

プロパゲートします:エラーを伝播する

wait: 完了を待つ

ジョブにパラメータがある場合は、このように追加することができる:

build job: '', parameters: [[$class: 'StringParameterValue', name: 'param1', value: 'test_param']]
解説 (11)
ソリューション

以下の解決策が私には有効だ:

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'
            }
        }
    }
}
解説 (5)

matias-snellingenが言ったことを補足します。 複数の関数がある場合、return thisはメインのパイプラインスクリプトで呼び出される関数の下に記述します。例えば、:

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

def helperMethod1(){ 
   //do stuff
} 

def helperMethod2(){
  //do stuff
}

someMethod()`はメインパイプラインスクリプトで呼び出される関数です。

解説 (0)

別のオプションは、パッケージを作成し、それをロードして、パッケージから実行することです。

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)

それが役立つことを願っています。

解説 (0)

@Matias Snellingenと@ Cé line Aussourdで述べたように、マルチブランチジョブを開始する場合は、次のように構築するブランチを指定する必要があります。

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

私の場合、それは問題を解決しました。

解説 (1)