またもやドキュメントで躓く…
こういうのはどこに意見送ったら良いんだろうか。ほんとに公式ドキュメントがわかりにくい…
書いてはいるんだけどね…
やろうとしていたこと
メインプロジェクト(ASPなど)とライブラリ系を分けて別リポジトリで管理、ビルド時に引っ張ってきてもらう。
まぁよくあるような構成
よくあるやり方
https://docs.microsoft.com/ja-jp/azure/devops/pipelines/repos/multi-repo-checkout?view=azure-devops
こういう感じですね。
けどうまくいきませんでした。
何度やっても別リポジトリのCheckoutが失敗する…
remote: TF401019: The Git repository with name or identifier samplelib does not exist or you do not have permissions for the operation you are attempting.
fatal: repository 'https://dev.azure.com/hogeorg/samplelib/_git/samplelib/' not found
##[warning]Git fetch failed with exit code 128, back off 6.747 seconds before retry.
リポジトリはもちろんある、URLも間違ってない。あとは権限まわり?けどどこで設定するんだろうか…
ビルドエージェント的なユーザーにリポジトリのread許可を与えても変わらない…
仕方ないといえど、こういう権限まわりってどんどん複雑になっていく印象。まぁゆるければそれに乗じて悪いことするやつがいるからなんだが。
いきついたところ
https://mikerodionov.com/azure-devops-pipeline-unable-to-checkout-external-repo-remote-tf401019-the-git-repository-with-name-or-identifier-does-not-exist/
なんとか検索しまくってこちらの記事に行き着いた。
どうやらここの設定が、公式で言う
Azure Pipelines Git リポジトリのジョブ スコープ設定を制限Azure Repos提供します。 別のプロジェクトでホストAzure Repos Git リポジトリをチェックアウトするには、アクセスを許可するようにジョブ スコープを制限するを構成する必要があります。 詳細については、「ジョブ承認スコープ の制限」を参照してください。
ことらしい。機械翻訳わけわかめ。英語で読んだほうが早い。
https://docs.microsoft.com/ja-jp/azure/devops/pipelines/repos/azure-repos-git?view=azure-devops&tabs=yaml#limit-job-authorization-scope
なお、公式だとこちら。AzureDevOpsの画面は英語なので日本語で読むべきでなかった…
- ジョブ承認スコープを現在のプロジェクトに制限する
- ジョブ承認スコープを参照先リポジトリAzure DevOps制限する
この2つの設定が、
このへんに当たる。
特に - Limit job authorization scope to current project for non-release pipelines
- Protect access to repositories in YAML pipelines
の2つ
先に Organization Settingsを変更する
個別Projectの設定を変えようとしてもデフォルトだとグレーアウトしていて変更できない。
まずはOrgの方を変えないといけないみたい。(こういうのも書いといてほしいな…)
行き着くには
Organization Settings > Pipelines > Settings のGeneralにある。
次にProjectの方を変更
メインプロジェクトの方を変更する(ライブラリ側は変更しなくても良い)
Project Settings > Pipelines > Settings
にあります。今度はグレーアウトしてないはず。
やっとビルドできた
同じエラーに遭遇している方のお役に立てれば幸いです。(ほんと時間かかった…)