前回の記事でGitLabをCentOSにインストールしました。今回はGitLab_CIをインストールして継続的インテグレーション生活をはじめます。GitLab_CIは出始めのころの導入記事しかなかったのでちょと大変でした。
公式で推奨されている方法は、
- gitlab -> ユーザー “git”
- gitlab_ci -> ユーザー “gitlab_ci”
- gitlab_ci_runner -> ユーザー “gitlab_ci_runner”
とそれぞれにユーザーを作る方法ですが、今回は両方とも1つのサーバに入れるので、全部ユーザー “git”によって操作させることにしました。じゃないとパーミッションとかで困ります。あと”gitlab_ci_runner”ってのは要はビルドスクリプトを実行するアプリで、gitlabを含めて3つのアプリをインストールすることになります。動かすポートは、
- gitlab -> 8079
- gitlab_ci ->8080
としてます。特に意味はありません。
ではまずgitlab_ciのインストールから。手順は公式のやり方に則りますが、ユーザーが”git”なのでちょとだけ変更が必要です。また前回同様”?”は”#”を表してます。
Contents
1. データベースの準備
いきなりですがデータベースを作っておきます。
? cd /home/git/ ? mysql -u root mysql> CREATE DATABASE IF NOT EXISTS `gitlab_ci_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`; mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlab_ci_production`.* TO 'git'@'localhost'; mysql> exit
2. インストール
? sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-ci.git ? cd gitlab-ci ? sudo -u git -H git checkout 4-2-stable ? sudo -u git -H cp config/application.yml.example config/application.yml ? sudo -u git -H vi config/application.yml
ソースをとってきてapplication.ymlを次のように書きかえます。gitlabのサーバアドレスと、gitlab_ciのポート番号を変更しています。
defaults: &defaults allowed_gitlab_urls: # Replace with your gitlab server url - 'http://localhost:8079/' ## Gitlab CI settings gitlab_ci: ## Web server settings host: localhost port: 8080 https: false ...
puma.rbもちょっとだけ変更
? sudo -u git -H cp config/puma.rb.example config/puma.rb ? sudo -u git -H vi config/puma.rb * application_path = '/home/git/gitlab-ci'に変更
ソケットとプロセスのファイルを作成
? sudo -u git -H mkdir -p tmp/sockets/ ? sudo chmod -R u+rwX tmp/sockets/ ? sudo -u git -H mkdir -p tmp/pids/ ? sudo chmod -R u+rwX tmp/pids/
データベースをセット
? sudo -u git -H bundle install --without development test postgres --deployment ? sudo -u git -H cp config/database.yml.mysql config/database.yml ? sudo -u git -H vi config/database.yml * gitlab_ci_productionのユーザーを"git"に、 * パスワードをmysqlのユーザー"git"のパスワードに変更 ? sudo -u git -H bundle exec rake db:setup RAILS_ENV=production ? sudo -u git -H bundle exec whenever -w RAILS_ENV=production
502 errorにならないようにパーミッションを変更
? chmod -R o+x /home/git/gitlab-ci/
initスクリプト
? cp /home/git/gitlab-ci/lib/support/init.d/gitlab_ci /etc/init.d/gitlab_ci ? chmod +x /etc/init.d/gitlab_ci ? vi /etc/init.d/gitlab_ci * APP_USER="git"に変更 ? service gitlab_ci start
nginx用のファイル
? sudo cp /home/git/gitlab-ci/lib/support/nginx/gitlab_ci /etc/nginx/sites-available/gitlab_ci ? sudo ln -s /etc/nginx/sites-available/gitlab_ci /etc/nginx/sites-enabled/gitlab_ci ? vi /etc/nginx/sites-enabled/gitlab_ci
gitlab_ciは次のような感じで変更します。ユーザー名とポートですね。
... upstream gitlab_ci { server unix:/home/git/gitlab-ci/tmp/sockets/gitlab-ci.socket; } server { listen 8080; # e.g., listen 192.168.1.1:80; server_name localhost; root /home/git/gitlab-ci/public; ...
これでnginxを再起動後、ポート8080にアクセスすれば、
gitlabのユーザ名とパスワードでそのままログインします。すると、gitlabで作ってるプロジェクトの一覧が出てきます。
“Add”をクリックするだけで連携可能。刺し身にタンポポをのせるより遥かに簡単です。
と思いきや、”runner”をインストールしろと言ってきます。不穏です。
言われた通りにインストールしたいところですが、全部ユーザー “git”ができるもんと言っているので多少の変更を行います。
1. ソース取ってきてbundle install
? cd /home/git ? sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-ci-runner.git ? cd gitlab-ci-runner/ ? git bundle install
楽勝です
2. セットアップ
GitLab CIの”Runners”ってとこをクリックするとこんな画面になります。
このtokenを使ってセットアップします。
? sudo -u git -H CI_SERVER_URL=http://localhost:8080/ REGISTRATION_TOKEN=<token> bundle exec ./bin/setup
うまくいくと秘密鍵が作られて、
Runner registered successfully. Feel free to start it!
って表示されます。
3. initスクリプト
? sudo cp ./lib/support/init.d/gitlab_ci_runner /etc/init.d/gitlab-ci-runner ? sudo chmod +x /etc/init.d/gitlab-ci-runner ? vi /etc/init.d/gitlab-ci-runner * APP_ROOT="/home/git/gitlab-ci-runner"に変更 * APP_USER="git"に変更
で、? service gitlab-ci-runner start でスタートします。
さあではいよいよビルドします。gitlab_ciのダッシュボードからAddしたプロジェクトをクリック > Settings で詳細設定画面を開きます。ここが一番大事なとこですが、Advanced Settings > GitLab url to projectを見て下さい。”http://localhost:8079/ユーザー名/プロジェクト名.git”となっていることと思いますが、これを直接リポジトリの場所を指すように変更します。つまり、”/home/git/repositories/ユーザー名/プロジェクト名”にします。で、セーブ。
次にgitlabの方でプロジェクトのSettings > Servicesを見ると”GitLab CI”のところにチェックが入っていると思います。これをクリックして、”Test settings”ボタンをクリックすると、テストのビルドが走ります。またgitlab_ciに戻ってプロジェクトを見てみると、
おー、ようやくビルド出来ました。それでこれからはgitlabにpushするたびにビルドスクリプトが走るはず、だったんですがそこが何故か走りません…ローカル同士故の問題っぽいですがまだよく分かりません。
とにかく導入までは行けたし一定時間ごとのビルドは出来るのでなんとかはなるかなー
追記: 次の記事も御覧ください -> GitLab_CI「Jenkinsおじさんには勝てなかったよ…」
コメント