はじめに
GitLabでCI/CDパイプラインやスクリプトからリポジトリを操作したい場合、個人のアカウント情報を使わずに「プロジェクトアクセストークン(Project Access Token)」を使うのが良いとのこと。
しかし、いざ使おうとすると git clone や git remote のURLにどうやってトークンを埋め込めばいいのか、ユーザー名は何にすればいいのかを毎回忘れて調べてしまう。
今回は、GitLabのプロジェクトアクセストークンを使用してリポジトリにアクセス(clone/pull/push)する方法を備忘録としてまとめておく。
※パーソナルアクセストークン(Personal Access Token)使ってしまっていたので、プロジェクトアクセストークンに切り替えたかった、というのもある。
環境
実行した環境は以下の通り
GitLab CE
git version 2.43.0URLの形式について
プロジェクトアクセストークンを使用する場合、認証は 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を使い回すよりもセキュリティ的に健全なので、スクリプト等でのアクセスには積極的に使っていきたい。