2017年1月14日土曜日

AWS EC2 の GitLab へリポジトリを移行する

オフィス狛 技術部です。

GitLab のインストール・設定シリーズ第3回目の今回は、Git リポジトリの移行を行います。
(移行元と移行先はサーバー(EC2インスタンス)が別)

その他の記事は、以下をご覧下さい。
第1回(AWS EC2 に GitLab をインストールする)
第2回(AWS EC2 に GitLab をインストールする(メールの送信テスト編))

では、早速Git リポジトリの移行を始めて行こうと思います。

1)GitLab にリポジトリ(プロジェクト)を作成する。

作成の手順は記載しませんが、前もって移行するリポジトリと同じ名前で、
GitLab プロジェクト(=リポジトリ)を作成しておく必要があります。

ちなみに、GitLab では、ユーザー、またはグループに属する形でプロジェクトが作成されます。
なので弊社の場合、共有リポジトリ用グループ(例:hogehoge-dev)を作成し、
開発者用のプロジェクトは全て hogehoge-dev に属する様に作成しています。

※あくまで置き場所として用意しているだけなので、権限設定に関しては、
別のグループ等を作成し、プロジェクト単位にグループへの権限付与を行なっています。

以降の説明を簡単にする為に、各設定の名称を以下と仮定します。
 ・旧Gitが存在しているサーバー : old.hoge.co.jp
 ・移行したいリポジトリ名 : RipoTest.git
 ・GitLab(新Git)が存在しているサーバー : new.hoge.co.jp
 ・GitLab のグループ : hogehoge-dev
 ・GitLab のプロジェクト名 : RipoTest

2)旧リポジトリをクローンする

続いて旧リポジトリをクローンします。
(今回、作業は、ローカル(Mac)側のターミナルで行なっています。)
sshで接続するので、旧サーバー側の鍵が必要になります。
鍵は、Macだと「/Users/mac_user/.ssh」に格納します。
※[mac_user]は、現在Macにログインしているユーザーです。

そして、コマンドを簡略化させる為に、同じディレクリに「config」というファイルを作成し、
Host config_name_1
  User connect_user
  HostName old.hoge.co.jp
  IdentityFile ~/.ssh/old_hoge_key_name
上記の内容を記述します。

 Host : コマンドに含める簡略名になります。 
 User : 接続するサーバーのユーザー
 HostName : 接続するサーバー
 IdentityFile : 使用する鍵の場所

これで準備が出来たので、早速クローンします。
$ git clone --mirror ssh://config_name_1/RipoTest.git
「mirror」を付ける事によって、履歴を含めたリポジトリのバックアップを取る感じでクローン出来ます。

3)GitLab(新Git)へプッシュする

続いて、先程クローンしたリポジトリをGitLab(新Git)へプッシュします。
こちらも先程と同じ様に、「config」を設定します。
Host config_name_2
  User git
  HostName new.hoge.co.jp
  IdentityFile ~/.ssh/new_hoge_key_name
※GitLabをインストールした時に、「git」ユーザーが作成されています。

これで準備が出来たので、早速プッシュします。
git push --mirror ssh://config_name_2/hogehoge-dev/RipoTest.git
「mirror」を付けること、そして、GitLab のグループ名をリポジトリ名の前に付ける事を忘れずに。

これで大抵のリポジトリは問題無くプッシュ出来るのですが、リポジトリの容量が大きいと・・・
Counting objects: 7400, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (6246/6246), done.
Writing objects: 100% (7400/7400), 558.97 MiB | 6.24 MiB/s, done.
Total 7400 (delta 2794), reused 3512 (delta 452)
remote: fatal: Out of memory, malloc failed (tried to allocate 228733096 bytes)
error: unpack failed: index-pack abnormal exit
To ssh://config_name_2/hogehoge-dev/RipoTest.git
 ! [remote rejected] master -> master (unpacker error)
error: failed to push some refs to 'ssh://config_name_2/hogehoge-dev/RipoTest.git'
と、エラーになる事があります。
これ、中々解決出来ず、ちょっとハマったのですが、
結論から言うと、プッシュ先(ここで言うとGitLabがインストールしてある「new.hoge.co.jp」)のメモリを増やす事で解決しました。(*1

*1) プッシュ先のEC2 インスタンスを「t2.medium」から「t2.large」に一時的に変更しました。
弊社の場合、プッシュが全て終わったら、「t2.medium」へ戻しています。
「t2.large」は料金が高いので・・・。


これでリポジトリの移行が完了です。


, , ,

0 件のコメント:

コメントを投稿