以下は、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がジョブをトリガーする必要があります。
ここには確かに欠けているものがあり、それは基本的でジェンキンスパイプラインにとって新しいものかもしれません。
望ましい動作を達成するためのヒントはありますか?