はじめに
GitLabの以下設定をAPIで実施していきます。
環境
設定の流れ
- インポートするグループ、プロジェクトを用意します。
・他のGitLabより、任意のグループとプロジェクトをエクスポートしておきます。
・エクスポートされないデータ(例えばトークン類)があるので確認が必要です。
・プロジェクトのインポート/エクスポート | GitLab
・グループのインポート/エクスポート | GitLab - 構築したGitLabを取り出します。
・t3.medium(メモリ4GB)では、アクセストークン作成の応答が返ってくるまで時間がかかります。
・GitLab installation minimum requirements | GitLab - rootアカウントのアクセストークンを作成します。
・以降の手順で、作成したアクセストークンを使います。 - ユーザを作成します。
- グループをインポートします。
- グループにユーザを追加します。
- グループにプロジェクトをインポートします。
- プロジェクトにWebhookを登録します。
APIによる設定
rootのアクセストークン作成
アクセストークンの作成はgitlab-rails consoleを利用します。
また、トークンには任意の文字列(20文字以上)が指定できます。
今回は1行で実施します。
# コマンド $ sudo gitlab-rails runner "token = User.find_by_username('【トークンが紐づくアカウント】').personal_access_tokens.create(scopes: [【トークンの権限】], name: '【トークンの名前】'); token.set_token('【トークン】'); token.save" # API権限を持つトークンの作成例 $ sudo gitlab-rails runner "token = User.find_by_username('root').personal_access_tokens.create(scopes: [:api], name: 'AutomationToken'); token.set_token('token-string-1234567'); token.save"
- 参考
- Personal access tokens | GitLab
- ドキュメントには「token.save!」と「!」がついていますが、環境によってはエラーになります。
- エラーメッセージ
ユーザの作成
なるべく少ない設定でユーザを作成します。
- skip_confirmation
- デフォルト: false
- trueにすると、メールアドレスの確認を検証済みにします。
# コマンド $ curl --request POST --header "PRIVATE-TOKEN:【トークン】" --form "email=【メールアドレス】" --form "name=【アカウント名】" --form "username=【ユーザ名(ログインID)】" --form "password=【パスワード】" "http://xx.xx.xx.xx/api/v4/users" # ユーザの作成例 $ curl --request POST --header "PRIVATE-TOKEN:token-string-1234567" --form "email=automation@example.com" --form "name=automation" --form "username=automation" --form "password=password1234" --form "skip_confirmation=true" "http://localhost/api/v4/users"
グループのインポート
グループをインポートします。
グループ名は2バイト文字も設定できます。
# コマンド $ curl --request POST --header "PRIVATE-TOKEN:【トークン】" --form "name=【グループ名】" --form "path=【グループのURL】" --form "file=@./【ファイルパス/ファイル名】" "http://xx.xx.xx.xx/api/v4/groups/import" # グループのインポート例 $ curl --request POST --header "PRIVATE-TOKEN:token-string-1234567" --form "name=test-group" --form "path=test-group" --form "file=@./test-group_export.tar.gz" "http://localhost/api/v4/groups/import"
グループへのユーザ追加
追加したいユーザのIDを調べ、そのIDを使ってグループにユーザを追加します。
また、グループに対するユーザのアクセス権限は以下が指定できます。
Group and project members API | GitLab
- アクセス権限
# コマンド $ 【ユーザID】=`curl --request GET --header "PRIVATE-TOKEN:【トークン】" "http://xx.xx.xx.xx/api/v4/users?username=【ユーザ名】" | jq -r '.[].id'` $ curl --request POST --header "PRIVATE-TOKEN:【トークン】" --data "user_id=【ユーザID】" --data "access_level=【アクセス権限】" "http://xx.xx.xx.xx/api/v4/groups/【グループのURL】/members" # グループへのユーザ追加例 $ ID=`curl --request GET --header "PRIVATE-TOKEN:token-string-1234567" "http://localhost/api/v4/users?username=automation" | jq -r '.[].id'` $ curl --request POST --header "PRIVATE-TOKEN:token-string-1234567" --data "user_id=${ID}" --data "access_level=20" "http://localhost/api/v4/groups/test-group/members"
グループへのプロジェクトインポート
作成したグループに、プロジェクトをインポートします。
# コマンド $ curl --request POST --header "PRIVATE-TOKEN:【トークン】" --form "namespace=【グループのURL】" --form "path=【プロジェクトのURL】" --form "file=@./【ファイル名】" "http://xx.xx.xx.xx/api/v4/projects/import" # グループへのプロジェクトインポート例 $ curl --request POST --header "PRIVATE-TOKEN:token-string-1234567" --form "namespace=test-group" --form "path=demo" --form "file=@./test-group_demo_export.tar.gz" "http://localhost/api/v4/projects/import"
リポジトリへのWebhook登録
リポジトリに、Webhookを登録します。 POST先URLのグループとプロジェクトの間の「/」は、「%2F」に置き換えます。
# コマンド $ curl --request POST --header "PRIVATE-TOKEN:【トークン】" --form "id=【リポジトリ名】" --form "url=【通知先のURL】" --form "push_events=true" --form "token=【通知先のトークン】" --form "enable_ssl_verification=false" "http://xx.xx.xx.xx/api/v4/projects/【グループ名】%2F【プロジェクト名】/hooks" # JrenkinsのWebhook登録例 $ curl --request POST --header "PRIVATE-TOKEN:token-string-1234567" --form "id=test-group" --form "url=https://jenkins.XXX/project/XXX" --form "push_events=true" --form "token=XXX" --form "enable_ssl_verification=false" "http://localhost/api/v4/projects/test-group%2Fdemo/hooks"