インストールが大変という定評のあった GitLab ですが、マニュアルインストールとアップグレードで凌いでいました。
GitLab CI を導入しようと試す過程で、サブディレクトリ運用だと OAuth 連携が上手くいかないことがわかりました。
現在はオールインワンのパッケージが提供されているため、下記を使えば簡単に GitLab, GitLab CI を一気に入れることができます。Nginx、PostgreSQL、Redis なども全てまとめて /opt/gitlab に入ります。 GitLab | Download GitLab Community Edition (CE)
サーバスペックをアップグレードするついでに上げますが、基本的にバーチャルホストを使うため FQDN を GitLab, GitLab CI で同じにできません。SSL 証明書に関しては、ワイルドカードを持ってないと辛いところです。
GitLab を最新に更新
下記の手順どおりやれば簡単に今は上がります。
gitlabhq/upgrader.md at master · gitlabhq/gitlabhq · GitHub
バックアップ
1 | $ cd /home/git/gitlab |
サービス停止
1 | $ sudo service gitlab stop |
アップグレード
1 | $ sudo -u git -i |
サービス起動
1 | $ sudo service gitlab start |
このタイミングで自分の環境では、rbenv で入っていたのが、2.1.3 で 2.1.5 じゃないとエラーが出ました。 /home/git/gitlab/.ruby-version を 2.1.5 に書き換えたら動きました。
1 | $ sudo service nginx restart |
更新後のチェック
1 | $ sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production |
GitLab Shell の更新
1 | $ sudo -u git -i |
データを MySQL から PostgreSQL に移行
現状のサーバでは MySQL をデータベースにしていましたが、Omnibus では PostgreSQL になってしまうのでコンバートする必要がありました。
GitLab.org / GitLab Community Edition | GitLab
バックアップを利用するため Converting a GitLab backup file from MySQL to Postgres を参照しました。
1 | $ sudo -u git -i |
最新のバックアップ tar ファイル名を確認します。
1 | $ ls -ltr tmp/backups/ |
最新の tar を一時ディレクトリに移動
1 | $ mkdir -p tmp/backups/postgresql |
DBスキーマを PostgreSQL 対応でダンプします。
1 | $ mysqldump --compatible=postgresql --default-character-set=utf8 -r gitlabhq\_production.mysql -u root gitlabhq\_production |
コンバーターを落としてきます。
1 | $ git clone https://github.com/gitlabhq/mysql-postgresql-converter.git |
スキーマを変換して、バックアップ tar の中の のスキーマ SQL ファイルを置き換えます。
$ mkdir db
$ python mysql-postgresql-converter/db_converter.py gitlabhq_production.mysql db/database.sql
$ tar rf <タイムスタンプ>_gitlab_backup.tar db/database.sql
<タイムスタンプ>_gitlab_backup.tar を新規サーバに転送します。
GitLab CE Omnibus package のインストール
ここから先は新サーバでの作業になります。
パッケージをインストール
$ sudo apt-get install openssh-server
$ sudo apt-get install postfix
$ wget https://downloads-packages.s3.amazonaws.com/ubuntu-14.04/gitlab\_7.7.2-omnibus.5.4.2.ci-1\_amd64.deb
$ sudo dpkg -i gitlab_7.7.2-omnibus.5.4.2.ci-1_amd64.deb
設定
/etc/gitlab/gitlab.rb を編集します。
以下、GitLab の FQDN は gitlab.example.com**、GitLab CI の FQDN は **ci.example.com とします。
external_url ‘http://gitlab.example.com/'
ci_external_url ‘http://ci.example.com/'
設定を反映させます。
$ sudo gitlab-ctl reconfigure
一連のサービスが起動します。Nginx が 80、Unicorn が 8080 ポートを使うので気を付けましょう。
$ sudo gitlab-ctl start
データベースバックアップをリストア
先ほどのバックアップアーカイブを /var/opt/gitlab/backups に移動して復元コマンドを実行します。
$ mv <タイムスタンプ>_gitlab_backup.tar /var/opt/gitlab/backups/
$ sudo gitlab-rake gitlab:backup:restore
GitLab と GitLab CI を連携
GitLab (http://gitlab.example.com/) にブラウザからログインします。 「Admin area」→「Applications」を開き、[New Application] を押して、Name に「GitLab CI」, Redirect URL に「http://ci.example.com/user_sessions/callback」を登録します。
Application Id と Secret が表示されるので、**/etc/gitlab/gitlab.rb** を編集して以下の行を追記します。
gitlab_ci[‘gitlab_server’] = { ‘url’ => ‘http://gitlab.example.com', ‘app_id’ => “<Application Id>”, ‘app_secret’ => ‘<Secret>’}
これを反映させます。
$ sudo gitlab-ctl reconfigure
$ sudo gitlab-ctl restart
以上で、GitLab と GitLab CI をシングルサインオンにできます。
GitLab CI Runner のインストール
最後に実際ビルドテストを行うランナーをインストールします。
gitlabhq/gitlab-ci-runner · GitHub を参考にしますが、ちょっとそのままだとできないところがありました。
依存パッケージをインストール
$ sudo apt-get update -y
$ sudo apt-get install -y wget curl gcc libxml2-dev libxslt-dev libcurl4-openssl-dev libreadline6-dev libc6-dev libssl-dev make build-essential zlib1g-dev openssh-server git-core libyaml-dev postfix libpq-dev libicu-dev
gitlab_ci_runner ユーザーを追加
ユーザーを追加します。
$ sudo adduser –disabled-login –gecos ‘GitLab Runner’ gitlab_ci_runner
$ sudo -u gitlab_ci_runner -i
rbenv と ruby-build で Ruby をインストール
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ echo ‘export PATH=”$HOME/.rbenv/bin:$PATH”‘ >> ~/.bash_profile
$ echo ‘eval “$(rbenv init -)”‘ >> ~/.bash_profile
$ type rbenv
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ rbenv install 2.1.5
$ rbenv global 2.1.5
bundler をインストール
$ gem install bundler
gitlab-ci-runner をインストール
1 | $ git clone https://gitlab.com/gitlab-org/gitlab-ci-runner.git |
最後のコマンドは対話式に GitLab CI の URL とトークンを入力します。トークンは GitLab CI の Runners ページに表示されます。
サービスに登録
1 | $ exit |
ランナー設定
rbenv の設定を /etc/init/gitlab-ci-runner.conf の Script に定義します。
1 | script |
ランナー起動
1 | $ sudo service gitlab-ci-runner start |
後は、Web画面から対象リポジトリを追加して、Jobとしてテストコマンドを定義すると、CI が実行できるようになります。