はじめに
こんにちは、ACS事業部の過部です。
今回は、Azure Pipelinesでパイプライン実行時にAzure Reposのcheckoutに失敗してしまうケースの対処法を紹介します。
この記事ではAzure Pipelinesから同一プロジェクトのAzure Reposをcheckoutする場合について扱っております。 Azure Pipelinesから同一組織の別プロジェクトのAzure Reposをcheckoutする場合の対処方については、こちらをご参考ください。
何が原因か
一言でいうと、パイプラインからリポジトリにアクセスする権限がないためです。
Azure DevOpsにはシステム側で作成されるユーザー及びグループ(サービスアカウント)が存在します。 Azure DevOps上では特定の操作が実施される場合、操作に応じたサービスアカウントを用いて実行されます。 パイプライン処理はこの特定の操作に含まれており、$Projectname Build Serviceと呼ばれるサービスアカウントを用いて実行されます。 この$Projectname Build Serviceがcheckout対象リポジトリに対するRead権限を持たない場合、checkoutは失敗してしまいます。
※ サービスアカウント名の$Projectnameには、利用しているプロジェクトの名前が入ります。
何をすればいいか
やることは簡単です。 Azure DevOps上で$Projectname Build Serviceに対象リポジトリに対するRead権限を付与してあげましょう。
手順① 対象リポジトリのセキュリティ設定画面へ移動
Read権限は対象リポジトリのセキュリティ設定から付与することができます。 プロジェクトのトップ画面から、Project settings -> Repositories -> (対象リポジトリ名) -> Security の順にクリックします。
手順② サービスアカウントへRead権限を付与
まず、検索欄に$Projectname Build Serviceを入力し、検索結果を選択します。 その次に、Read設定をAllowに変更します。
終わりに
以上で作業は完了です。 パイプラインをトリガーして無事実行できるか確認してみましょう。