Edited at

RailsにSideCIとCircleCIをそれぞれ導入する

More than 1 year has passed since last update.


はじめに

RailsアプリにCIツールを導入して、コードの自動解析やテストやデプロイを自動でやりたかったので

比較的簡単に導入できそうなSideCIとCircleCIを使ってみました。

その時の導入方法や使ってみた所感をつらつら書きます。

リポジトリやコードはあくまで参考にしてください。


こんな時に使える


  • コードの品質を一定にしたい

  • レビュアーの負担を減らしたい

  • プルリクエストに対して自動でテストやデプロイしたい

  • CIの結果をslackに通知したい

  • もろもろ自動化したい


SideCI


概要

公式 : https://sideci.com/


プルリクエストを自動で解析し、セキュリティバグ、コード規約、文法、重複記述、未使用の変数、複雑度を検知します



準備

Githubのアカウントがあれば利用できます。

Githubと連携してアカウント登録します。

パブリックリポジトリは無料ですが、プライベートリポジトリは有料です。


使ってみる

ビルド対象のリポジトリを選択します。

sideci_0.png

設定したリポジトリに対してプルリクエストを作成するとSideCIのチェックが実行されます。

sideci_1.png

解析結果はこんな感じです。

各ライブラリが実行されて、問題があるところがissue化されます。

あとは修正したコミットをプッシュすればまたSideCIの解析が実行され、問題なければissueがfixedになります。

sideci_2.png

slackへの通知はプロジェクト設定からできます。

sideci_3.png


カスタマイズ

sideci.ymlと言うファイルを作ればカスタマイズできます。

公式 : https://sideci.com/ja/docs/linter-config-by-sideciyml


sideci.ymlファイルをレポジトリのルートディレクトリに配置頂くことで、SideCIの自動コードレビュー機能の設定を行うことが出来ます。各機能のオン・オフはSideCIの画面上から行えます。また、各機能はカスタマイズなどはそれぞれの機能に準じます。各機能がサポートしていないカスタマイズ・設定などについてのみ、sideci.ymlファイルで設定することが可能です。


また、テストやデプロイの自動実行ができないかサポートに問い合わせてみたところ


SideCIはCIを冠しておりますが、実質はRuboCopなどの解析器を自動実行することで、コードレビューを自動化・促進する開発支援ツールであり、デプロイやテストの自動実行はできません。


とのことです。


CircleCI


概要

公式 : https://circleci.com/


CircleCI is the best CI/CD solution for teams who want to build faster, ship more, and fail less at any scale. We handle millions of builds a month in any language, for any platform.



準備

Githubのアカウントがあれば利用できます。

Bitbucketでも登録できます。

今回はGithubと連携してアカウント登録します。

1コンテナ無料 追加の1コンテナ毎に $50/月


使ってみる

登録したらPROJECTSからビルドするリポジトリを設定します。

Add_Projects_-_CircleCI.png

リポジトリを設定するとコンテナにsshするためのDeploy keyがGithubに追加されました。

Deploy_keys.png

リポジトリを設定すると自動でビルドが実行されました。

カスタマイズのところで書きますが、 circle.ymldatabase.yml.ciと言うファイルを作成するとビルドをカスタマイズできます。

ファイルがない場合はデフォルトの環境設定でビルドが実行されるようです。

CircleCI.png

SSHで接続するにはビルド画面で「 Debug via SSH 」のタブを開くと、SSHの接続コマンドが表示されています。ビルド完了後30分まではSSH接続ができ、ビルドが失敗した時の原因の調査ができそうです。

CircleCI_ssh.png

おもむろにsshしてみます。

OSはubuntuですね。

$ ssh -p xxxxx ubuntu@xx.xx.xx.xx

Welcome to Ubuntu 14.04.4 LTS (GNU/Linux 3.13.0-123-generic x86_64)

* Documentation: https://help.ubuntu.com/

System information as of Tue Jul 11 14:43:06 UTC 2017

System load: 18.47 Processes: 48
Usage of /home: unknown Users logged in: 0
Memory usage: 29% IP address for eth0: xx.xx.xx.xx
Swap usage: 0% IP address for lxcbr0: xx.xx.xx.xx

Graph this data and manage this system at:
https://landscape.canonical.com/

Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud

103 packages can be updated.
51 updates are security updates.

New release '16.04.2 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

Last login: Tue Jul 11 14:44:19 2017 from xx.xx.xx.xx
_____________________________________________________________________
WARNING! Your environment specifies an invalid locale.
This can affect your user experience significantly, including the
ability to manage packages. You may install the locales by running:

sudo apt-get install language-pack-ja
or
sudo locale-gen ja_JP.UTF-8

To see all available language packs, run:
apt-cache search "^language-pack-[a-z][a-z]$"
To disable this message for all users, run:
sudo touch /var/lib/cloud/instance/locale-check.skip
_____________________________________________________________________

ubuntu@box705:~$

root配下に設定したリポジトリがあるので試しに rails consoleを開いてみます。

test環境で実行されてますね。

ubuntu@box705:~/oshiyaberin$ bin/rails c

DEPRECATION WARNING: ActionView::Template::Handlers::Erubis is deprecated and will be removed from Rails 5.2. Switch to ActionView::Template::Handlers::ERB::Erubi instead. (called from require at /opt/circleci/.rvm/gems/ruby-2.3.3/gems/bundler-1.14.6/lib/bundler/runtime.rb:91)
Loading test environment (Rails 5.1.0)
[1] pry(main)>

プルリクエストを作成すると自動でCircleCIのビルドが実行されます。

ビルドが失敗したらビルド画面で確認して対応します。

CicleCI_rspec.png

ビルドの結果はメールでもきます。

Cursor_と_Window.png

slackへの通知設定は以下の画面で行います。

CircleCI_slack.png


カスタマイズ

circle.ymlと言うファイルを作ればカスタマイズできます。

circle.ymlはRailsアプリケーションのルートディレクトリに配置します。

6個のセクションを持つ

machine : VM環境の設定

checkout : コードチェックアウト後の処理

dependencies : 依存関係。環境作成時の処理

database : DBの初期処理

test : テストコマンド

deployment : テスト正常終了後に実行されるデプロイコマンドを設定

デプロイに関しては専用のシェルスクリプトを作って、実行させるといった流れが多いようです。

こちらの記事が参考になりそうです。


所感を一言で


SideCIについて

静的コード解析するだけなら簡単に導入できて良さそう


CircleCIについて

若干時間かかりそうだけど、設定ファイルやシェルスクリプトを駆使してこれ一つで全部完結できそう


参考

https://www.slideshare.net/mogproject/circleci-51253223

http://blog.spacemarket.com/code/circleci/

http://qiita.com/ysk_1031/items/f584a0599791bdba132a