akishin999の日記

調べた事などを書いて行きます。

GitLab 5.4 から 6.0 へアップデートする

GitLab 6.0 がリリースされました。

グループ機能を強化した「GitLab 6.0」リリース、有償版の提供も開始
http://sourceforge.jp/magazine/13/08/23/140000

Fork したプロジェクトからオリジナルへの MergeRequest が可能になるなど、より GitHub に近付いた感じですね。
というわけで早速前回インストールした 5.4 を 6.0 にアップデートしてみました。

基本的には以下のドキュメントに従って作業をしていきます。

gitlabhq/doc/update/5.4-to-6.0.md
https://github.com/gitlabhq/gitlabhq/blob/master/doc/update/5.4-to-6.0.md

バックアップ

まずは現在のデータのバックアップを行います。

# cd /home/git/gitlab
# sudo -u git -H RAILS_ENV=production bundle exec rake gitlab:backup:create

と思ったら「Dumping uploads」で「No such file or directory - /home/git/gitlab/public/uploads」エラー。
どうやら構築手順で漏れていましたが、public/uploads ディレクトリが必要なようです。

なのでここで一旦作成し、再度バックアップを実行します。

# mkdir /home/git/gitlab/public/uploads
# chown git:git /home/git/gitlab/public/uploads
# sudo -u git -H RAILS_ENV=production bundle exec rake gitlab:backup:create

今度は上手く行きました。
バックアップファイルは以下の場所に作成されるようです。

# ll /home/git/gitlab/tmp/backups
合計 80
-rw-rw-r--. 1 git git 40960  823 21:00 2013 1377259246_gitlab_backup.tar
-rw-r--r--. 1 git git 40960  823 21:02 2013 1377259375_gitlab_backup.tar

サーバの停止

次にアプリケーションサーバを停止します。
ここでは Apache + Passenger で動かしているので httpd と、別のサービスとして登録していた sidekiq の二つのサービスを停止しました。

# service httpd stop
# service sidekiq stop

最新のコードの取得

gitlab のリポジトリを更新します。

# cd /home/git/gitlab
# sudo -u git -H git fetch
# sudo -u git -H git checkout 6-0-stable

gitlab-shell の更新

gitlab-shell の方も更新します・・・とありますが、前回の手順で既にドキュメントで指定されているバージョン 1.7.0 を使用していたのでスルーしました。

追加パッケージのインストール

python-docutils パッケージを追加でインストールします。
yum でも同名で提供されていました。

# yum install -y python-docutils

ライブラリのインストールとマイグレーション

まずは bundler で追加されたライブラリをインストールします。
MySQL を使用しているので postgres グループは除外しています。

# cd /home/git/gitlab
# sudo -u git -H bundle install --deployment --without development test postgres

以下の rake タスクを実行して各種データのマイグレーションを行います。

# sudo -u git -H bundle exec rake db:migrate RAILS_ENV=production
# sudo -u git -H bundle exec rake migrate_groups RAILS_ENV=production
# sudo -u git -H bundle exec rake migrate_global_projects RAILS_ENV=production
# sudo -u git -H bundle exec rake migrate_keys RAILS_ENV=production
# sudo -u git -H bundle exec rake migrate_inline_notes RAILS_ENV=production

GitLab 6.0 からは global な namespace のプロジェクトが deprecated になったので、 migrate_global_projects 実行時には自動でプロジェクトオーナーの namespace 以下に移動させて良いか訊かれます。
後で手動で移動させる事もできるので、その辺りはチェックアウトしているユーザへの影響など考慮しながら適宜判断する感じでしょうか。
ここでは面倒なのと一人用 GitLab なので yes を選択しました。

その他も db:migrate 以外では実行可否を聞かれますが、特に問題無さそうなので全部 yes を選択しました。
どれも新しいバージョンでの仕様変更に関する内容のようなので、古いバージョンから長いこと使用しているような場合には良く読んで慎重に選択した方が良さそうです。

最後に assets:precompile も忘れずに実行しておきます。

# sudo -u git -H bundle exec rake assets:precompile RAILS_ENV=production

設定ファイルの更新

config/gitlab.yml と config/unicorn.rb の差分を確認、とのことですが、ここでは Unicorn は使用していないので gitlab.yml だけ確認しました。

# diff config/gitlab.yml config/gitlab.yml.example
18c18
<     host: 192.0.2.1
---
>     host: localhost
20a21,22
>
>     # Uncomment and customize the last line to run in a non-root path
22,23c24,28
<     # Uncomment and customize to run in non-root path
<     # Note that ENV['RAILS_RELATIVE_URL_ROOT'] in config/puma.rb may need to be changed
---
>     # Note that three settings need to be changed for this to work.
>     # 1) In your application.rb file: config.relative_url_root = "/gitlab"
>     # 2) In your gitlab.yml file: relative_url_root: /gitlab
>     # 3) In your unicorn.rb: ENV['RAILS_RELATIVE_URL_ROOT']
>     #
99a105
>     allow_username_or_email_login: true

最後の allow_username_or_email_login は LDAP の設定でした。
LDAP は使っていないのと、それ以外特に違いは無さそうなのでこのままで良さそうです。

init スクリプトの更新

起動スクリプトは sidekiq の部分のみ抜き出したものを使用していますが、特に変わりも無さそうなので取りあえずそのまま。

アプリケーションの起動

いよいよ起動してみます。

# service sidekiq start
# service httpd start

ブラウザを起動してアクセスしてみるとログイン画面がこんな感じに。

思い切り 6 って書いてあります。
Help ページを確認してみると、こちらも無事 6.0.0 になっていました。

他にも Global な namespace で作成していたプロジェクトがオーナーの namespace 配下になっていたりと、どうやら今回のバージョンアップは上手く行ったようです。

まとめ

GitLab はバージョンが変わる毎に結構インストール手順が変わっちゃったりして追いかけるのが大変なんですが、リリースバージョン 1 つ差くらいだと案外簡単にバージョンアップできますね。
余り間が空くとどんどん面倒になりそうなので、使っている方は早めに思い切ってバージョンアップしてしまうといいかも知れません。

ついでに以前書いた Ansible の Playbook も 6.0.0 をインストールするように修正してみました。
新機能を気軽に試したい方はこちらを使ってみて下さい。