はじめに
仕事環境では、以下のように Group(=サービス) の中にそれぞれ機能ごとに Project が格納されている構造を取っています。
sample
├── documents
├── sample-client
├── sample-database
├── sample-api
├── sample-admin-api
...
そのため、新規サービスに参画したときや、新人たちは一つ一つ Project 数ぶん git clone
する必要があり、とても面倒でした。
多いときは同じ Group 内に 30 以上も Project があったりします。。。
なので新規参画者のために効率化しようと思い、一発でまとめてクローンできるようなスクリプトを作成しました!
使い方
- $(GROUP_ID) に clone したい Group(リポジトリ)を指定する。
- clone したい階層にて git bash でコマンドを実行する。
前提
- Group 配下に Subgroup がある場合、その Subgroup は clone してくれない。
- その場合は、その配下分、同じようにスクリプトを実行すること。
スクリプト
#!/bin/sh
GITLAB_HOST=git.sample.com
PRIVATE_TOKEN=XXXXXXXXXX
# Group ID を指定
GROUP_ID=9999999
curl -sS --request GET \
--header "PRIVATE-TOKEN: ${PRIVATE_TOKEN}" \
"https://${GITLAB_HOST}/api/v4/groups/${GROUP_ID}" | jq '.projects[].http_url_to_repo' | xargs -n 1 git clone
もし gitlab クライアント証明書使用している場合、$(KEY_FILE) と $(CERT_FILE) に自身の gitlab クライアント証明書のパスを指定します。
#!/bin/sh
GITLAB_HOST=git.sample.com
PRIVATE_TOKEN=XXXXXXXXXX
# gitlab クライアント証明書のパスを指定
KEY_FILE=xxx-key.pem
CERT_FILE=yyy-cert.pem
# Group ID を指定
GROUP_ID=9999999
curl -sS --request GET \
--header "PRIVATE-TOKEN: ${PRIVATE_TOKEN}" \
--key ${KEY_FILE} \
--cert ${CERT_FILE} \
"https://${GITLAB_HOST}/api/v4/groups/${GROUP_ID}" | jq '.projects[].http_url_to_repo' | xargs -n 1 git clone
さいごに
前提にも書いてあるように、今回のスクリプトでは「Group 配下に Subgroup がある場合、その Subgroup は clone してくれない。」ので、これも解決できるようなスクリプトを今後は書きたいです!