2017-01-13 30 views
2

Jenkinsパイプラインジョブがあります。 BitBucket WebHookによって呼び出されているリモートトリガを基に構築されています。これは動作し、ビルドを開始します。JenkinsパイプラインジョブのBitBucketペイロードデータにアクセス

また、BitBucket(described here)から送信されたペイロードデータにアクセスして、特定のブランチなどのプッシュに関する詳細を取得する必要があります。

通常、このペイロードを解析して環境変数としてジョブに提示しますが、パイプラインジョブをそのプラグインの特定のリポジトリに接続するように設定することはできません。

私は、データがそうのようないくつかの異なる方法で利用可能であったかどうかを確認するためにテストを試してみました:

node { 
    stage 'Desperation' 

    echo "${params.push}" 
    echo "${env.BITBUCKET_PAYLOAD}" 
    echo "${env.push}" 
} 

これらは動作しません(でも私は本当に彼らがに期待していませんでした)。

このペイロードデータを取得する方法はありますか?私が思いつくことができるのは、フリースタイルの仕事をしてBitBucketとの接続を確立した後、データを再フォーマットしてこの仕事を呼び出すことだけです。しかし、それはひどく厄介なようだ。

答えて

4

最終的には解決策が必要でした。

最後にパイプラインジョブmy-buildとフリースタイルジョブmy-build-triggerです。

my-build-triggerは簡単です。 SCMセクションにgit repoが設定されており、ビルドトリガーセクションでBuild when a change is pushed to BitBucketがチェックされています。

ビルド後のアクションで、私はTrigger parameterized build on other projectsを選択しました。

上記は重要です。 Build other projectsはパイプラインジョブを起動しません。単にmy-build is not buildableと表示されます。

定義済みのパラメータで、ペイロードパラメータをダウンストリーム(パイプライン)ジョブに渡します。payload=${BITBUCKET_PAYLOAD}と入力します。

BITBUCKET_PAYLOADは、BitBucketペイロードオブジェクトのBitBucketプラグインによって設定された環境変数です。あなたはこのようになります。あなたのビルド後

のBitbucket hereからペイロードのドキュメントを参照してくださいすることができます:あなたのパイプラインの仕事に Jenkins post-build calling Pipeline with parameters

は、あなたがして​​(文字列型)と呼ばれる、対応するパラメータを作成する必要があります。で

Jenkinsfileあなたがそうのように、このペイロードを使用することができます。

node { 
    stage 'Echo stuff pointlessly' 
    def payload = new groovy.json.JsonSlurper().parseText("${params.payload}") 
    // Echoes the new commit hash 
    echo payload.push.changes[0].new.target.hash 
} 

が警告され、あなたの仕事( java.io.NotSerializableException: groovy.json.internal.LazyMap)で直列化のエラーが発生することがあります。それは in this questionと説明されています。要するに、使用後に​​と他のJSONObject変数を無効にする必要があります。

コメントや改善は常に高く評価されています。

関連する問題