🌳

Azure Reposで大事なブランチを守るためにできること

2024/10/31に公開

Pull Requestなしでは変更をマージできないようにする

ブランチのロック機能というのがあるのでそれをつかえばPRなしでの変更のマージは不可になります。
ロックするとこんな感じでロックしたブランチに鍵マークがつきます。

設定するには、保護したいブランチの・・・からLockを選択します。

保護されたブランチのファイルを直接編集しようとすると、Commitボタンが非活性になって変更できなくなります。
(※ブランチのAuthor以外はこの挙動になりますが、ブランチのAuthorは編集ができてしまいます)

ロックされたブランチに対して変更を適用したい場合は、必ずPull Requestによるレビューを通ることが必要になります。

https://learn.microsoft.com/ja-jp/azure/devops/repos/git/lock-branches?view=azure-devops

それでも心配な場合

上記の設定だけだと自分でPR作って自分でApprove、ということもできてしまいますので、性悪説に基づいてそれじゃ不安だという場合は、ブランチポリシーを設定することでよりブランチに対する変更の適用までのフローをより厳しく制限することができます。

保護したいブランチの・・・からBranch policiesを選択すると、

そのブランチの設定画面に遷移します。

ここでは、以下の設定が可能です。

  • Require a minimum number of reviewers(レビューアの最低人数を要求)
    PRの承認に必要なレビューアの人数を指定するポリシーです。設定を有効にすると、指定した人数のレビューアが承認しない限り、プルリクエストはマージできません。

さらに、「この人のレビューは絶対に通す必要がある」という場合は、下のAutomatically included reviewersの+を押下して、

レビューしてほしい人を追加してRequiredに設定します。

  • Check for linked work items(関連する作業項目の確認)
    PRに関連する作業項目がリンクされているかを確認するポリシーです。
    設定を有効にすると、PRが作業項目にリンクされていない場合に警告が表示され、リンクがないとマージができなくなります。どの作業に対してどんな変更をしたかを厳密にトラックするために有効です。

  • Check for comment resolution(コメントの解決を確認)
    PR内で追加されたコメントがすべて解決されているかを確認するポリシーです。設定を有効にすると、コメントが未解決のままではPRをマージできなくなります。

  • Limit merge types(マージタイプの制限)
    ルリクエストのマージ時に使用できるマージの種類を制限するポリシーです。たとえば、「Merge commit」「Squash merge」「Rebase and merge」など、特定のマージ方法だけを許可することができます。

https://learn.microsoft.com/ja-jp/azure/devops/repos/git/branch-policies?view=azure-devops&tabs=browser

Pipelineによるチェックを強制

Azure Pieplinesのベースラインアーキテクチャでは、PR作成をトリガーとして動くPR Pipelineによって、自動ビルド、単体テスト、静的コード解析を実施することが推奨されています。

これを実現するためには、上記のような処理を実行するPipelinesをAzure Pipelinesで作成し、そのPipelinesをブランチポリシーの設定画面のBuild Policyから追加する必要があります。

ここでBuild Pipelinesの箇所でチェックを実行するPipelinesを選択し、Policy requirementをRequiredにすると、このPipelinesのチェックを完了しないとPRがマージできなくなります。

Azure Pipelinesのベースラインアーキテクチャに則ったPipelinesの詳しい作り方はこちらをご覧ください。
https://zenn.dev/yuriemori/articles/5f89bb5403485e

Discussion