web-dev-qa-db-ja.com

GitHub Org Pluginを使ってjenkinsパイプライン(jenkinsfile)から別のジョブを起動する方法を教えてください。

Jenkinsfileの中から他のジョブのビルドをトリガーするにはどうすればいいですか?

私はこの仕事が同じ github組織 の下の別のリポジトリであると思います、それはすでにそれ自身のJenkinsファイルを持っています。

また、ブランチ名がmasterの場合にのみこれを行いたいのですが、これはローカルブランチのダウンストリームビルドをトリガーするのは意味がありません。

更新:

stage 'test-downstream'
node {
     def job = build job: 'some-downtream-job-name'
}

それでも、実行するとエラーになります

Some-downtream-job-nameという名前のパラメータ化ジョブが見つかりません

私はこの仕事がjenkinsに存在し、現在のものと同じ組織フォルダの下にあることを確信しています。それはそれ自身のJenkinsfileを持つ別の仕事です。

この質問はGitHub組織の各リポジトリとブランチのジョブを自動作成して管理する GitHub組織プラグイン に固有のものです。

102
sorin

まず第一に、buildステップをnodeでラップすることはexecutorスロットの浪費です。あなたの上流のexecutorはただ理由もなくアイドル状態にあるでしょう。

次に、マルチブランチプロジェクトから、環境変数BRANCH_NAMEを使用して、現在のブランチに対して論理的な条件付きロジックを作成できます。

3番目に、jobパラメーターは絶対または相対ジョブ名を取ります。パスを指定せずに名前を付けると、同じフォルダ内の別のジョブが参照されます。マルチブランチプロジェクトの場合は、同じリポジトリの別のブランチになります。

したがって、あなたが書くつもりだったのは、おそらく

if (env.BRANCH_NAME == 'master') {
    build '../other-repo/master'
}
108
Jesse Glick

上記の答えに加えて:私は2番目のパイプラインに渡された簡単なパラメータで仕事を始めたいと思っていて に答えを見つけました-with-jenkins-workflow

だから私は使用しました:

stage ('Starting ART job') {
    build job: 'RunArtInTest', parameters: [[$class: 'StringParameterValue', name: 'systemname', value: systemname]]
}
88
FrankIJ

パイプラインのコマンドbuildは、jenkinsの他のジョブを起動するためのものです。

githubでの例

仕事はJenkinsに存在しなければならず、パラメータ化することができます。ブランチに関しては、私はあなたが gitからそれを読むことができると思います

19
Flo

Jenkins Pipeline (最小Jenkins要件:2.130)からbuild jobステップを使用できます。

buildステップの完全なAPIは次のとおりです。 https://jenkins.io/doc/pipeline/steps/pipeline-build-step/

buildの使用方法:

  • job:ビルドするダウンストリームジョブの名前。別のPipelineジョブかもしれませんが、より一般的にはフリースタイルまたは他のプロジェクトです。
    • ジョブが同じフォルダーにある場合は、simple nameを使用します上流のパイプラインジョブ。
    • 代わりに../sister-folder/downstreamのような相対パスを使用できます
    • または、/top-level-folder/nested-folder/downstreamのような絶対パスを使用できます

ブランチをパラメーターとして使用して別のジョブをトリガーする

私の会社では、多くの支店に「/」が含まれています。 「/」のインスタンスを「%2F」に置き換える必要があります(ジョブのURLに表示されるとおり)。

この例では、相対パスを使用しています

    stage('Trigger Branch Build') {
        steps {
            script {
                    echo "Triggering job for branch ${env.BRANCH_NAME}"
                    BRANCH_TO_TAG=env.BRANCH_NAME.replace("/","%2F")
                    build job: "../my-relative-job/${BRANCH_TO_TAG}", wait: false
            }
        }
    }

ビルド番号をパラメーターとして使用して別のジョブをトリガーする

build job: 'your-job-name', 
    parameters: [
        string(name: 'passed_build_number_param', value: String.valueOf(BUILD_NUMBER)),
        string(name: 'complex_param', value: 'prefix-' + String.valueOf(BUILD_NUMBER))
    ]

多数のジョブを並行してトリガーします

ソース: https://jenkins.io/blog/2017/01/19/converting-conditional-to-pipeline/

Parallelの詳細はこちら: https://jenkins.io/doc/book/pipeline/syntax/#parallel

    stage ('Trigger Builds In Parallel') {
        steps {
            // Freestyle build trigger calls a list of jobs
            // Pipeline build() step only calls one job
            // To run all three jobs in parallel, we use "parallel" step
            // https://jenkins.io/doc/pipeline/examples/#jobs-in-parallel
            parallel (
                linux: {
                    build job: 'full-build-linux', parameters: [string(name: 'GIT_BRANCH_NAME', value: env.BRANCH_NAME)]
                },
                mac: {
                    build job: 'full-build-mac', parameters: [string(name: 'GIT_BRANCH_NAME', value: env.BRANCH_NAME)]
                },
                windows: {
                    build job: 'full-build-windows', parameters: [string(name: 'GIT_BRANCH_NAME', value: env.BRANCH_NAME)]
                },
                failFast: false)
        }
    }

または、代わりに:

    stage('Build A and B') {
            failFast true
            parallel {
                stage('Build A') {
                    steps {
                            build job: "/project/A/${env.BRANCH}", wait: true
                    }
                }
                stage('Build B') {
                    steps {
                            build job: "/project/B/${env.BRANCH}", wait: true
                    }
                }
            }
    }
3
Katie

並列、ノード、エージェントのオプションや外部ジョブをトリガーするためのステップなど、さまざまなロジックを実行に追加できます。そのために、読みやすいクックブックの例をいくつか挙げました。

1.条件付きの例でjenkinsファイルから外部ジョブを起動する例:

if (env.BRANCH_NAME == 'master') {
  build 'exactJobName' , parameters:[
    string(name: 'keyNameOfParam1',value: 'valueOfParam1')
    booleanParam(name: 'keyNameOfParam2',value:'valueOfParam2')
 ]
}

2.例条件付きのjenkinsファイルから複数のジョブをトリガーする例:

 def jobs =[
    'job1Title'{
    if (env.BRANCH_NAME == 'master') {
      build 'exactJobName' , parameters:[
        string(name: 'keyNameOfParam1',value: 'valueNameOfParam1')
        booleanParam(name: 'keyNameOfParam2',value:'valueNameOfParam2')
     ]
    }
},
    'job2Title'{
    if (env.GIT_COMMIT == 'someCommitHashToPerformAdditionalTest') {
      build 'exactJobName' , parameters:[
        string(name: 'keyNameOfParam3',value: 'valueOfParam3')
        booleanParam(name: 'keyNameOfParam4',value:'valueNameOfParam4')
        booleanParam(name: 'keyNameOfParam5',value:'valueNameOfParam5')
     ]
    }
}
1
avivamg