新しもの好きプログラマの耳より情報ブログ

仕事でもあるプログラミングについて役に立ちそうな情報を発信していこうというブログです。役に立たなそうな情報はfacebookで。

git submoduleコマンドに、実行時に認証トークンを与える方法(Azure DevOpsで実験)

解決したい問題

Azure Pipelineのスクリプト内でgit submoduleコマンドを使おうとすると、認証が通らずに失敗する。

submoduleのURL自体にトークンを入れておけば通るが、リポジトリ自体にトークンを入れてしまうと変更時などに困るし、できればパイプライン側からトークンを与えたい。

解決方法

次のように-cオプションを使うことで、実行時にトークンを与えることが出来た。

git -c http.extraheader="AUTHORIZATION: bearer <トークン文字列>" submodule ・・・

応用

Azure Pipelinesの場合、同一のグループ内のリポジトリを参照するのであれば、次のようにSystem.AccessToken変数を与えることでビルド時トークンを使ってそのままアクセスさせることが出来る。

git -c http.extraheader="AUTHORIZATION: bearer $(System.AccessToken)" submodule ・・・

これで、同一グループ内のリポジトリをsubmoduleにする場合に、トークンで悩む必要がなくなった。

ちなみに、クラシックパイプラインの場合は$(System.AccessToken)を使うためには、さらに「Allow scripts to access the OAuth token」設定をONにする必要がある点に注意。

参考:https://docs.microsoft.com/en-us/azure/devops/pipelines/build/variables?view=azure-devops&tabs=yaml#systemaccesstoken