🕵️‍♀️

Azure DevOps で Pull Request 時に自動で様々なチェックを実施する

2021/02/16に公開
2

Azure DevOps (正確には Azure Repos) で Pull Request を活用する際に、ブランチ単位で下記のようなことを設定できます。

  • PR作成と同時に単体テストを実行し、失敗した場合はマージできないようにする
  • 最低N人のコードレビューを受ける
  • 特定のレビュアーを必ず含めるようにし、通知を送る
  • レビュアーが残したコメントに応答しているか確認する
  • PRに関連する Work Item を明確にする

これらを重要なブランチに設定することで品質担保に繋がります。この記事ではそれらの設定方法を解説します。

ブランチポリシーの設定

ブランチ毎にポリシーを設定できます。ポリシー設定済みのブランチにはバッジがつきます。

Repos > Branches

ブランチポリシーは、そのブランチに対する Pull Request が作成された際に適用されます。また、ブランチポリシーが設定されたブランチへ直接Pushすることは禁止されます。

ブランチポリシーを設定するには、各ブランチの設定(三点リーダ)から「Branch policies」に遷移します。既にポリシー設定済の場合はバッジを押下することでも遷移できます。

必須レビュアー数

「最低N人のコードレビューを受ける」という制約を設けることができます。

これは実際に私のプロダクトで設定しているものです。

この場合、最低2人がコードレビューをして承認をしないとマージができません。ただし、「Allow requestors to approve their own changes」をONにしているため、Pull Request を提出した本人が自分で承認ボタンを押してもカウントされます。これは Pull Request を作成した本人にも再度コードをチェックしてもらうために設定しています。そのため、実質的に本人以外に最低1人承認してもらえばOKです。

また、「When new changes are pushed: Reset all approval votes (does not reset votes to reject or wait)」を選択することで、コードレビュー承認後に追加でコミットした場合に承認ステータスをリセットして再度レビューしてもらうことができます。

固定レビュアー

決まった方(リーダーなど)を必ずレビュアーに含めたい場合はブランチポリシーで設定しておくことができます。

Required に設定するとそのレビュアーの承認が必須、 Optional に設定するとそのレビュアーの承認ステータスに依らずマージできます。

レビューコメントへの応答のチェック

レビュアーのコメントに対して PR作成者が応答しているかどうかをチェック項目にすることができます。

Required に設定すると、PR作成者はコメントを確認して最終的にコメントのステータスを「Resolved」「Won't fix」「Closed」のいずれかに変更する必要があります。Optional に設定した場合はその必要はありませんが、警告が表示されるようになるためコメントを見逃すリスクが減ります。

PR作成時にパイプラインを実行する

「PR作成と同時に単体テストを実行し、失敗した場合はマージできないようにする」といった制約を設けることができます。

Required に設定すると、パイプラインの正常終了がマージの条件になります。Optional の場合はパイプラインは実行されますが、終了ステータスに依らずマージできます。

また、「Build expiration」では、パイプライン実行後にブランチに新しいコミットが増えた場合の挙動を設定できます。

関連する Work Item のチェック

Work Item と PR を関連付けて後から追跡できるようにするために、 Work Item の関連付けを必須化させることができます。

Required に設定すると、 Work Item を最低1件は紐付けないとマージできなくなります。Optional の場合は Work Item がひとつも紐付いていない場合に警告が出るようになります。[1]

設定結果

無事、ブランチポリシーが設定されているブランチに対するPRを作成すると、下記のように自動でチェックが実施されるようになりました🎉

脚注
  1. 当初「全て Closed になるまでマージができなくなる」と勘違いしていましたが、コメントにて乳牛さんにご指摘いただきました。ありがとうございます! ↩︎

Discussion

乳牛乳牛

Required に設定すると、全て Closed になるまでマージができなくなります。

ここはリンクされたWork Itemの状態まではチェックしなかったかと。最低1つはなにかリンクしないとComplete出来ないという挙動だったと思います。

ばつしい / vatscyばつしい / vatscy

勘違いしていました・・・ありがとうございます!
(この機能を大して活用していないのがばれる)