GitLab 6.9.4からGitLab7.4.2へのアップデートとSSHポートの設定

銀鷹です。

しばらく研究室のGitLabのアップデートをサボっていたが、
Task listsがサポートされたということもありバージョンアップを行ったので手順を残しておく。

GitLabの変更内容の詳細は以下のURLを参照のこと。
幾つか変更が行われているが、私(及び周囲の人)としてはTask Listsのサポートが一番大きい。 https://about.gitlab.com/2014/10/22/gitlab-7-4-released/

今回アップデートするGitLabはomnibus installerでインストールしているため、
アップデートもomnibus installerを用いて行う。

手順は以下のとおり、今回はGitLab 6.9.2からGitLab7.4.2へアップデートを行った。
今回アップデートを行うGitLabはDebian 7.6上で動作している。
公式アップデート手順より引用。

unicornとsidekiqの停止。

sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq

GitLabのバックアップ(リポジトリWiki、ユーザ等)

sudo gitlab-rake gitlab:backup:create

最新版パッケージの入手と適応。
以下のdebパッケージのURLは新しいバージョンがリリースされると変わるはず。 最新のものはここで確認のこと。

wget https://downloads-packages.s3.amazonaws.com/debian-7.6/gitlab_7.4.2-omnibus-1_amd64.deb
sudo dpkg -i gitlab_7.4.2-omnibus-1_amd64.deb

GitLabの再設定と再起動。
gitlab.ymlを手動で書き換えている場合は変更が取り消されるので注意すること。
可能であれば後述の方法で設定の変更を行うことを推奨。

sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart

以上でアップデートは完了。
なお、omnibus installerではなく、GitからCloneしてインストールをしている場合のアップデート手順は以下のとおり。
https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/update/6.x-or-7.x-to-7.4.md

/etc/gitlab/gitlab.rbを用いたGitLabの設定変更方法

例として、22番ポート以外でOpenSSH Serverを動作させている場合について記載する。
調べると、多くの場合以下のようにgitlab.ymlを変更するように記載されていることが多い。

http://stackoverflow.com/questions/18517189/gitlab-with-non-standard-ssh-port-on-vm-with-iptable-forwarding

## GitLab Shell settings
gitlab_shell:
  ...
  # If you use non-standard ssh port you need to specify it
  ssh_port: 766

ただし、この用に直接gitlab.ymlを編集した場合、sudo gitlab-ctl reconfigureを実行することで設定内容が上書きされてしまう。
正しくはgitlab.rbに以下のように記載する。

gitlab_rails['gitlab_shell_ssh_port'] = 766

この記載を行った上で、sudo gitlab-ctl reconfigureを実行することによって、
ssh_portに766が設定された状態でgitlab.ymlが生成される。

このように記載することでgitlab.ymlの内容が変更される理由

GitLabのCookBookを見るとgitlab_shell_ssh_portは以下のように定義されている。
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/files/gitlab-cookbooks/gitlab/attributes/default.rb#L128

しかし、このattributesの上書きは以下のように行われるため、
通常のCookBookのattributesを上書きするつもりでgitlab.rbを編集すると失敗する。 https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/files/gitlab-cookbooks/gitlab/libraries/gitlab.rb#L247

正しく設定を行うためには、 default['gitlab']['gitlab-rails']['gitlab_shell_ssh_port']の中からgitlab-railsの部分を取り出し、-_に変更する。
その上で、その後ろに['gitlab_shell_ssh_port'] = <設定したいポート番号>と記載すればよい。

なぜこのような面倒な事を行っているのかはよくわからないが、
このようにすることでsshのポート番号に限らず他のattributesの上書きも行うことが可能である。

例えば、smptのポートを変更したい場合には、gitlab.rbに以下のように記載すれば良い。
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/files/gitlab-cookbooks/gitlab/attributes/default.rb#L159

gitlab_rails['smtp_port'] = 11125