GitLabのセットアップについて、以下の記事の通り完了しました。
その後、GitLabでGUI画面から1人1人ユーザー登録するのはGUIから行えます。
一方で、コマンドラインから一括でバルクでユーザーを登録する方法を調べました。
目次
GitLabのユーザー登録
GitLabでは、Linuxのユーザーではなくて、独自にユーザー管理を行っています。
GUIからユーザー登録することは、一般ユーザーには便利ですね。
ただ、サーバー管理者からは一度に100人とか、たくさんのユーザーを登録することがあります。
その際に、いちいちGUIからは登録できませんね。
そこで、方法が分からずに悩んで、Stack Overflowに質問したところ、以下のように回答が寄せられました。
Gitlab offers multiple authentication methods. Gitlab can manage the user accounts itself or can use external services such as LDAP. For a full list and how to configure it, please take a look on GitLab Integration documentation.
GitLab offers an API which can be used to automatically add new users. You need to create a script for that, but its worth if you have dozens of users. There is actually a python module pyapi-gitlab for this API. I also stumbled on a quick search over a tool called python-gitlab I haven't heard about before. Might be worth a try.
This documentation might be helpful when it comes to adding existing users to already available groups
恐るべきStack Overflow、なんと便利なんでしょう。
世界のITユーザーコミュニティは助け合いの精神がすごいですね。
一言では
「python-gitlabというプロジェクトがあるのでそれを使ってみて」
ってことでした。
python-gitlabをインストール
それでは、さっそくpython-gitlabをインストールしてみます。
python-gitlabのプロジェクトのマニュアルはコチラです。
インストール方法や、使い方はここに詳しく書かれています。
また、GitHubにソースがあります。
python-gitlabのインストールはとても簡単です。
Linuxのrootユーザーで、以下の手順通りに実行します。
1 2 3 |
git clone https://github.com/python-gitlab/python-gitlab.git cd python-gitlab python setup.py install |
インストールはこれで完了です。
次に、設定を行います。
rootユーザーのホームディレクトリ /root 直下に .python-gitlab.cfg というファイルを作ります。
1 |
vim ~/.python-gitlab.cfg |
中身として以下の内容を記述します。
1 2 3 4 5 6 7 8 9 |
[global] default = local ssl_verify = true timeout = 5 [local] url = https://gitlab.url/ private_token = PRIVATE_TOKEN_FROM_YOUR_ACCOUNT api_version = 3 |
ここで、
PRIVATE_TOKEN_FROM_YOUR_ACCOUNTの値は、
以下の通りGitLabのAccount settingsから取得します。
これは、GitLabの管理者で行うべきでしょう。
コマンドラインから、python-gitlabを使ってみた
さっそく、python-gitlabを使ってみました。
以下のコマンド操作を行うことが出来ます。
1 2 3 4 5 6 7 8 |
gitlab --help gitlab project help gitlab team help gitlab team-project help gitlab group help gitlab team help gitlab user help gitlab group-member help |
この中でも、
gitlab userがユーザーに関する操作で、
gitlab projectがプロジェクトに関する操作です。
まず、helpを表示してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# gitlab user help user options: user list --page=ARG --per-page=ARG user get --id=ARG user create --email=ARG --username=ARG --name=ARG [--password=ARG] [--skype=ARG] [--linkedin=ARG] [--twitter=ARG] [--projects-limit=ARG] [--extern-uid=ARG] [--provider=ARG] [--bio=ARG] [--admin=ARG] [--can-create-group=ARG] [--website-url=ARG] user update [--email=ARG] [--username=ARG] [--name=ARG] [--password=ARG] [--skype=ARG] [--linkedin=ARG] [--twitter=ARG] [--projects-limit=ARG] [--extern-uid=ARG] [--provider=ARG] [--bio=ARG] [--admin=ARG] [--can-create-group=ARG] [--website-url=ARG] user delete --id=ARG # gitlab project help project options: project list --page=ARG --per-page=ARG project get --id=ARG project create --name=ARG [--default-branch=ARG] [--issues-enabled=ARG] [--wall-enabled=ARG] [--merge-requests-enabled=ARG] [--wiki-enabled=ARG] [--snippets-enabled=ARG] [--public=ARG] [--visibility-level=ARG] [--namespace-id=ARG] [--description=ARG] [--path=ARG] [--import-url=ARG] project delete --id=ARG project all project owned project search --query=ARG |
たくさんオプションがあることが分かります。
コマンドラインで、ユーザーを作ってから削除してみます。
1 2 3 4 5 |
# gitlab user create --email=aaa@bbb.ccc --username=aaa --name=aaa --password=aaaaaaaa id: 2 username: aaa # gitlab user delete --id=2 |
とても簡単にコマンドでユーザーを追加したり削除したりすることが出来ます。
一括してコマンドラインからユーザー登録するには、
gitlab user create
を使えばよいことがわかりました。
そのほか、コマンドラインから、全ユーザーの一覧を表示するには以下のようにコマンドを実行します。
1 |
# gitlab user list --all |
コマンドラインから、パスワードを更新するには以下のようにコマンドを実行します。
1 |
# gitlab user update --id 4 --email aaa@bbb.ccc --username aaa.bbb --name aaa.bbb --password (パスワード) |
GitLabでsshのキー作成
ユーザーを追加できたので、今度はGitLabで管理しているリポジトリからcloneしたり、pushしたりしてみます。
まず、sshのキーを作成ししてみます。
1 2 3 4 |
# gitlab-rake gitlab:shell:setup RAILS_ENV=production This will rebuild an authorized_keys file. You will lose any data stored in authorized_keys file. Do you want to continue (yes/no)? yes |
/var/opt/gitlab/.ssh/authorized_keys
の中身を見てみても
1 |
# Managed by gitlab-shell |
となっていて空のままです。
よく分からないので以下を参考に
クライアント側のパソコンのcygwinからsshキーを生成してみます。
1 2 |
$ ssh-keygen -t rsa -C "admin@example.com" $ cat ~/.ssh/id_rsa.pub |
結果を以下の画面にコピー&ペーストします。
「Add key」
を押すとなんかうまくいったような表示になりました。
/var/opt/gitlab/.ssh/authorized_keys
にも値が入りました。
git cloneしてみます。
1 2 3 4 5 6 7 8 9 10 |
$ git clone ssh://root@192.168.141.136/var/opt/gitlab/git-data/repositories/roo t/repo.git Cloning into 'repo'... root@192.168.141.136's password: remote: Counting objects: 2107, done. remote: Compressing objects: 100% (602/602), done. remote: Total 2107 (delta 1435), reused 2102 (delta 1434) Receiving objects: 100% (2107/2107), 6.77 MiB | 0 bytes/s, done. Resolving deltas: 100% (1435/1435), done. Checking connectivity... done. |
なんかうまくいきました。
ただ、ローカルで変更後にリポジトリにpushしてもうまくいきません。
1 2 3 4 5 6 7 8 9 10 11 12 |
$ git push root@192.168.141.136's password: Counting objects: 9, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (4/4), 329 bytes | 0 bytes/s, done. Total 4 (delta 1), reused 0 (delta 0) remote: GitLab: No such user or key To ssh://root@192.168.141.136/var/opt/gitlab/git-data/repositories/root/repo.git ! [remote rejected] master -> master (pre-receive hook declined) error: failed to push some refs to 'ssh://root@192.168.141.136/var/opt/gitlab/gi t-data/repositories/root/repo.git' |
remote: GitLab: No such user or key
うーん。。。
という訳でいったんここで断念しました。
????どうなっているんだろうか?
GitLabなしのユーザー管理とGitLabありのユーザー管理
Stack Overflowで質問したら、回答が返ってきました。
どうやら、sshで接続する際の接続先とか、ユーザー管理について勘違いしていました。
GitLabで追加したユーザーは、
GitLabでsshキーを登録後、リポジトリへのアクセス権限が付与されていれば、
誰であっても以下のコマンドでcloneするようです。
1 |
$ git clone ssh://git@aa.bb.cc.dd:/root/reponame.git |
GitLabなしでユーザー管理するときと、GitLabありでユーザー管理するときの違いは以下の通りです。
GitLabなしで管理 | GitLabありで管理 | |
---|---|---|
ユーザー | Linuxで定義したユーザー 通常は/homeにホームディレクトリがある |
GitLabで定義したユーザー Linuxで定義ユーザーとは完全に無関係 |
リポジトリをsshで取得する際のパス | $ git clone ssh://(ユーザー名)@aa.bb.cc.dd/var/lib/git/reponame.git
Linuxのファイルシステムとしては、 /var/lib/git/reponame.git というGitのbareリポジトリが存在していると仮定し、ユーザーがこのフォルダへのLinuxのパーミッションがあるとき
|
$ git clone ssh://git@aa.bb.cc.dd:/root/reponame.git
Linuxのファイルシステムとしては、 /var/opt/gitlab/git-data/repositories/root/reponame.git というGitのbareリポジトリが存在していると仮定し、GitLabでこのリポジトリへのアクセス権が付与されているとき |
sshでログインする際の管理方法 | sshのキーを交換していない場合は、sshでアクセスする場合、必ず、パスワード入力が必要になる。
自宅、会社など様々なパソコンでもgitがインストールされている環境から、リポジトリへのアクセスが可能となる。。 |
使用するパソコンのsshキーをGitLabに登録する必要がある。
自宅、会社などパソコンが異なれば、パソコンごとにsshキーを作成して登録する必要がある。
|
リポジトリの権限管理 | Linuxでのパーミッション管理。 単純な権限管理のみ行うことが出来る。 |
管理者からGUIで設定可能。 master、Developer、Reporter、Guestの権限を設定することが可能。 |
5人ぐらいでリポジトリを管理するなら、GitLabを導入すると、かえってわずらわしそうな気がします。
ただ、10人以上ならGitLabを導入してGitのサーバーを管理することを推奨します。
GitWebやGinatraのように、リポジトリのGUIインターフェースだけ導入できればいいんですが、GitWebやGinatra は、GitLabに比べるとかなり物足りないです。
Gitについてのおすすめの本
↓Gitについてのおすすめの本はコチラ
コメント