最小限のGitLab環境を作る（移行テスト用）

## 目的

動作確認やデータ移行のために、最小限かつ再構築＆使い捨て可能な GitLab 環境を用意したい。実運用で他のユーザーが利用するということは考慮しない。

## 用途例

私の中では、[Trac/Redmine+Subversion+Jenkinsなどを捨ててGitLabに移行するまでの道のり](https://qiita.com/hkato/items/3ddfe72985f7536bdf97) の中での作業の一環。

上記の記事で、

- Trac → Redmine
- Subversion → Git

に変換できたので Trac/Redmine の Ticket/Issue 等を GitLab に移行するテスト環境を用意したい。Vagrant 等で作った VM 上に Omnibus 版を入れるという方法や[誰かが作ったGitLab box](https://app.vagrantup.com/boxes/search?q=gitlab)を利用するか、 Docker Desktop for * に k8s が入ってるので、[Helm chart](https://docs.gitlab.com/charts/) でという方法もあるかもしれない(やったことないが)。しかし k8s は逆に大掛かり。Docker Hub の公式イメージ [gitlab/gitlab-ce](https://hub.docker.com/r/gitlab/gitlab-ce/) は Omnibus 版を Docker image に詰め込んだものの様で、Docker container のあり方[^1]とか、マイクロサービス的にどうなの?という気もするが、サクッと環境を用意するにはとても便利なのでこちらを利用。[sameersbn/gitlab](https://hub.docker.com/r/sameersbn/gitlab/) は中途半端な気がした。

[^1]: [Dockerfile のベストプラクティス](http://docs.docker.jp/engine/articles/dockerfile_best-practice.html) - コンテナ毎に１つのプロセスだけ実行

## 設定

公式サイト > Omnibus GitLab Docs > [GitLab Docker images](https://docs.gitlab.com/omnibus/docker/)

に記載されている通り、

最初に書いたとおり、本番運用するものでなく、あくまでもローカルの検証テストやデータ移行様なので、`http://localhost:8081` で稼働させる。検証環境なら Docker Desktop for * を使うことが多いと思う。この場合、 docker-compose が最初から使えるから、オプション指定するよりも `docker-compose.yml` が楽。

データ移行目的なら、 ssh や https も不要なので http を別ポートで稼働させるだけ。

```yaml
web:
  image: 'gitlab/gitlab-ce:latest'
  hostname: 'localhost'
  environment:
    GITLAB_OMNIBUS_CONFIG: |
      external_url 'http://localhost:8081'
  ports:
    - '8081:8081'
  volumes:
    - '$GITLAB_HOME/config:/etc/gitlab'
    - '$GITLAB_HOME/logs:/var/log/gitlab'
    - '$GITLAB_HOME/data:/var/opt/gitlab'
```

これで、

永続化するヴォリュームのパスを指定し、

```sh
$ export GITLAB_HOME=$PWD/srv/gitlab
```

起動、

```sh
$ docker-compose up
```

あるいはバックグラウンド起動で、

```sh
$ docker-compose up -d
```

あとは、しばらく待ってログで起動を確認してから、ブラウザでアクセスして管理者パスワードを変更すれば良い。

## ~~GitLab API v3 対応~~ → 不要

以前、redmine-gitlab-migrator を調べたときは非対応だったけど、現在は対応しているので不要。というかURLが`/api/v3`→`/api/v4`になり、API Ver. 切り替えがあるわけではないので、当然最新版は API v4 でないと動作しない。Open中 の Issue があるが、小さなプロジェクトで Redmine 3.4.13 → GitLab 13.1.4 への変換を試したところ roadmap/issue は **なんとなく移行できる**様子。GitHub の Description/About に `LOOKING FOR MAINTAINER` の記載があるのでメンテナンスが滞ってるような雰囲気があったが数日前にも更新されている。

- [The v3 API is deprecated and not usable with a actual gitlab version](https://github.com/redmine-gitlab-migrator/redmine-gitlab-migrator/commit/6f62585d103dca7f2941cae8df7e5cb60d27b785)
- [Gitlab v3 -> v4 api possible solution #34](https://github.com/redmine-gitlab-migrator/redmine-gitlab-migrator/issues/34)

~~ところで、[Redmine to Gitlab migrator](https://github.com/redmine-gitlab-migrator/redmine-gitlab-migrator) を使いたいが、こちら、API v3 にしか対応していないので、API v3 をサポートしている GitLab を選びたい。~~

- GitLab Docs > API Docs > [API V3 to API V4](https://docs.gitlab.com/ee/api/v3_to_v4.html)
- [GitLab #36819 Removal of API v3 from the codebase](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/36819)

GitLab 9.5 でサポート自体は終了し API V4 に移行したが、コード自体は残りAPI V3 でも応答している。その後、11.0 で API V3 のコード自体が削除された。10.x の最終版は 10.8.7 になり、ここまで API V3 の応答は返してくる。~~一応 V3 API をサポートしている 9.x を選ぶべきか悩むが、10.8.7 で移行作業を試してみる。~~ → 上記の通り、redmine-gitlab-migrator は API V4 に対応してる。

```yaml
#web:
#  image: 'gitlab/gitlab-ce:10.8.7-ce.0'
#  hostname: 'localhost'
#  environment:
#    GITLAB_OMNIBUS_CONFIG: |
#      external_url 'http://localhost:8081'
#      listen_port 8081
#  ports:
#    - '8081:8081'
#  volumes:
#    - '$GITLAB_HOME/config:/etc/gitlab'
#    - '$GITLAB_HOME/logs:/var/log/gitlab'
#    - '$GITLAB_HOME/data:/var/opt/gitlab'
```

ちなみに、11.0.0 で API V3 を試すとこんな感じ。

```sh
$ curl "http://localhost:8081/api/v3/users?private_token=XXXXXXXXXXXXXXXXXXXX"
{"error":"API V3 is no longer supported. Use API V4 instead."}
```

## 今後

~~Redmine to Gitlab migrator([redmine-gitlab-migrator](https://github.com/redmine-gitlab-migrator/redmine-gitlab-migrator)) は[71](https://github.com/redmine-gitlab-migrator/redmine-gitlab-migrator/network/members)のFork[^2]があり、どの修正版が良いのか確認していない。もしかしたら API V4 に対応した Fork があれば…と思うが、とりあえず、Redmine 3.4.13 → GitLab 10.8.7 → GitLab 最新 へ移行テストしてみたいと思う。~~

Redmine 3.4.13 → GitLab 13.1.x で移行テストしてみたいと思う。

[^2]: 2020-7-21現在