GitLabのプロジェクトアクセストークンでgit clone/pullする

はじめに

GitLabでCI/CDパイプラインやスクリプトからリポジトリを操作したい場合、個人のアカウント情報を使わずに「プロジェクトアクセストークン(Project Access Token)」を使うのが良いとのこと。

しかし、いざ使おうとすると git clonegit remote のURLにどうやってトークンを埋め込めばいいのか、ユーザー名は何にすればいいのかを毎回忘れて調べてしまう。

今回は、GitLabのプロジェクトアクセストークンを使用してリポジトリにアクセス(clone/pull/push)する方法を備忘録としてまとめておく。

※パーソナルアクセストークン(Personal Access Token)使ってしまっていたので、プロジェクトアクセストークンに切り替えたかった、というのもある。

環境

実行した環境は以下の通り

GitLab CE
git version 2.43.0

URLの形式について

プロジェクトアクセストークンを使用する場合、認証は HTTP Basic認証 となる。
URLにユーザー名とトークンを埋め込む形式は以下の通り

http(s)://<ユーザー名>:<アクセストークン>@<GitLabホスト>/<グループ>/<プロジェクト>.git

各項目の説明

  • ユーザー名: 実は何でも良い(任意の文字列)。

    • 例: oauth2, token, gitlab-ci-token など。
    • 迷ったら oauth2 にしておけば分かりやすいだろう。
  • アクセストークン: 発行されたトークン文字列そのものを使用する。

    • 例: glpat-xxxxxxxxxxxxxxxxxxxx

使い方

git clone する場合

ユーザー名を oauth2 とした場合の例。

git clone http://oauth2:glpat-xxxxxxxxxxxx@[ホスト]/[グループ]/[プロジェクト].git

既存のリポジトリの設定を変更する場合 (git remote set-url)

すでに clone 済みのリポジトリで、認証情報をトークンに切り替える場合は git remote set-url を使う。

git remote set-url origin http://oauth2:glpat-xxxxxxxxxxxx@[ホスト]/[グループ]/[プロジェクト].git

一回だけ pull したい場合

設定を変更せずに、今回だけトークンを使って pull したい場合は、引数にURLを直接指定すれば良い。

git pull http://oauth2:glpat-xxxxxxxxxxxx@[ホスト]/[グループ]/[プロジェクト].git

補足:Botユーザーについて

プロジェクトアクセストークンを作成すると、GitLab上には project_{project_id}_bot といった名前の Botユーザー が自動的に作成される。
GitのコミットログやGitLabの操作履歴には、このBotユーザーによる操作として記録されることになる。

おわりに

プロジェクトアクセストークンは、発行されたプロジェクト内でのみ有効なため、万が一漏洩しても被害を最小限に抑えられる。
個人のパスワードやPersonal Access Tokenを使い回すよりもセキュリティ的に健全なので、スクリプト等でのアクセスには積極的に使っていきたい。

Hugo で構築されています。
テーマ StackJimmy によって設計されています。