Jenkins Pipelineとstash Pull Request BuilderがPRの作成/更新で機能しない


7

以下は、Jenkins Pipelineを使用するために必要な要件であり、Jenkins Pipelineに初めて参加しました。

  • 開発作業を完了し、変更をBitbucketにプッシュした後、ユーザーはプルリクエストを作成します。
  • プルリクエストを承認するには、成功したJenkinsビルドが少なくとも1つ必要です。これにより、プルリクエスト用にチェックインされたコードのビルド結果のみを取得したいと思います。
  • プルリクエストが作成/更新されると、Jenkinsは実際の継続的な統合のために自動的にトリガーされます。
  • ビルド結果はBitbucketに報告されます。

Stash Pull Request Builderとstash Notifierを使用して、通常のフリースタイルプロジェクトで機能する上記のプロセスを実行しました。

Jenkinsパイプラインを使用して同様の機能を移行する必要があるため、以下のようにjenkinsジョブを作成しました。

ここに画像の説明を入力してください

PRブランチをチェックアウトしてビルドをトリガーするパイプラインスクリプトは次のとおりです

node {
    stage('Checkout') {         
        checkout(
        [
            $class: 'GitSCM',
            extensions: [               
                [$class: 'CleanCheckout'],              
            ],
            branches: [
                [name: '']
            ], 
            userRemoteConfigs: 
            [[
                credentialsId: 'id', 
                url: 'repourl.git'
                refspec: ('+refs/pull-requests/*/from:refs/remotes/origin/pr/*/from'), 
                branch: ('origin/pr/${pullRequestId}/from')
            ]]
        ])
    }

    stage('Build') {    
        sh 'make'
    }
    stage('notify') {
    step([$class: 'StashNotifier'])
        try {
            // Do stuff
            currentBuild.result = 'SUCCESS'     
        } catch(err) {
            currentBuild.result = 'FAILED'
        }
    step([$class: 'StashNotifier'])
   }

}

PRを作成/更新するときに上記の構成を実行しましたが、jenkinsでビルドが自動的にトリガーされません。stashからjenkinsへの通知は"origin/${pullRequestId}/from"、フリースタイルプロジェクトで指定しているため、発生しなかったと思います。しかし、パイプラインジョブで指定するオプションはありません。

以下のようにいくつかの代替案を試しました。

プルリクエストビルダーを隠しておく代わりに、「ポーリングSCM」プロジェクトを試してみて、トリガーするcronジョブをとして指定しました"H/2 * * * *"。コミットすると、ジョブはジェンキンスでトリガーされます。つまり、コミットごとにjenkinsジョブがトリガーされます。ただし、PRが作成または更新されると、Jenkinsがジョブをトリガーする必要があります。

ここには確かに欠けているものがあり、それは基本的でジェンキンスパイプラインにとって新しいものかもしれません。

望ましい動作を達成するためのヒントはありますか?


調査結果に基づいて質問を編集しました
user1876040 '12 / 07/12

基本的なことを最初に、Bitbucket IPをホワイトリストに登録しましたか?また、bitbucket Webhookを確認して、期待どおりに動作しているかどうかをお知らせください。
Munai Das Udasin 2017

こんにちは、@ Munai Das Udasin、応答ありがとうございます。以下は私の観察です。社内ネットワークで作業しているため、bitbucket ipsはホワイトリストに登録されたIPの1つです。それは問題ではありません。また、Webhookに関する分析では、欠点が少なくなっています。a)PRが更新された場合、jenkinsでジョブがトリガーされません。b)PRが拒否された場合、ユースケースどおりにジョブがトリガーされません。
user1876040 2017

回答:


2

groovyスクリプトでは、bashとは異なる方法で環境変数を参照する必要があります。

したがって、おそらくこの行が問題を引き起こしています:

branch: ('origin/pr/${pullRequestId}/from')

使ってみてください:

branch: ('origin/pr/' + env.pullRequestId + '/from')

2

上記の答えを拡張するに -次を使用してみてください:

branch: "origin/pr/${pullRequestId}/from"

Groovyでは、単純な文字列(つまり、単一引用符内の文字列)に対して文字列の補間が行われないためです。詳細については、http://groovy-lang.org/syntax.html#_string_interpolationを参照してください


参考までに、上記の回答はありません。StackExchangeサイトはフォーラムではなく、回答の順序は必ずしも時間順になるとは限りません。別の回答を参照する場合は、リンクするか、後で参照している回答がわかりにくい場合があります。
Tensibai

0

同じ問題でしたが、目的の結果を達成するために、PRトリガー(フリースタイルプロジェクト)とPRビルダー(パイプライン)の2つのジョブを作成しました。

PRトリガーに追加したGitプラグイン、Stashプルリクエストビルダープラグイン(同じ構成はパイプラインで機能しませんでした)およびパラメーター化されたトリガープラグイン(プルリクエストIDをPRビルダーパイプラインに渡すため、プロジェクトからビルド-PRビルダー)。

ここに画像の説明を入力してください

PRビルダーにパラメーター化ビルドプラグインを追加しました。

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.