web-dev-qa-db-ja.com

別のジェンキンスパイプラインBでジェンキンスパイプラインAを呼び出す方法

パイプラインAとパイプラインBの2つのJenkinsパイプラインがあります。パイプラインBでパイプラインAを呼び出したい。これどうやってするの?

(パイプラインAはパイプラインBのサブセットです。パイプラインAは、パイプラインBで再利用できるいくつかの日常的な作業を行う責任があります)

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

43
Yash

次の解決策は私のために働いています:

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

別のパイプラインスクリプトまたはジョブを呼び出すかどうかが少し不明なので、両方に答えます。

パイプラインスクリプト「ロード」ステップは、他のパイプラインスクリプトを実行します。同じディレクトリに両方のスクリプトがある場合、次のようにロードできます。

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']]
42

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

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

def helperMethod1(){ 
   //do stuff
} 

def helperMethod2(){
  //do stuff
}

someMethod()は、メインパイプラインスクリプトで呼び出されるものです

1
papigee

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

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
IsaacE