SlideShare a Scribd company logo
株式会社nanapi 遠山 晃(@Vexus2)
nanapiにおける
継続的インテグレーション
Agenda
Introduction
Continuous Integration
ChatOps
radicate a Continuous Integration
Introduction
遠山 晃 / @vexus2
サーバサイド開発がメイン
継続的デプロイ、自動化、プラグイン開発が
得意分野
nanapiにおける継続的インテグレーション
Our Team
http://ignition.co/
Your everyday source for
inspiration and motivation
http://ignition.co/
Your everyday source for
inspiration and motivation
今日はnanapi.jpじゃな
くてIGNITIONのお話
Language
Ruby 2.1.2
Rails 4.1.4
!
(参考) Railsで新規にWebサービスを立ち上げる際にやったことまとめ
http://nanapi.co.jp/blog/2014/04/17/rails_development/
Environment
Agenda
ChatOps
radicate a Continuous Integration
Introduction
Continuous Integration
CI as a Service
GitHosting
Platform as a Service
Communication Tools
development
CI as a Service
GitHosting
Platform as a Service
Communication Tools
PUSH
development
CI as a Service
GitHosting
Platform as a Service
Communication Tools
PUSH
Trigger
development
CI as a Service
GitHosting
Platform as a Service
Communication Tools
PUSH
Trigger
development
Build
CI as a Service
GitHosting
Platform as a Service
Communication Tools
PUSH
Trigger
development
asset sync
Deploy
Build
CI as a Service
GitHosting
Platform as a Service
Communication Tools
PUSH
Trigger
development
asset sync
Deploy
Notification
Build
Build/Test Phase
nanapiにおける継続的インテグレーション
Travis CIだとスペックに難あり
Travis CI・・・ 2コア、メモリ3GB
Circle CI・・・ 8コア、メモリ16GB
Circle CIと比べてビルドが桁違いに遅い
SSH accessでCI環境内に入れる
ドハマり時の調査/デバッグが捗る
なぜCircle CIを使うか?
Auto Testing
Auto Testing
テストが落ちたら
SlackにMentionを付けて通知
余談
?
Jenkinsの良いところ
拡張、カスタマイズが自由自在
Jenkinsの微妙なところ
オンプレミスなのでサーバ/サービスの維持が必要
各ジョブの設定が秘伝のタレ(=要Jenkins職人)にな
りがち
専属チームがメンテし続けるなら良いかも(個人的結論)
なぜJenkinsを使わないか
nanapiにおける継続的インテグレーション
http://wercker.com/
テストを実行する仮想環境(Box)が豊富
プライベートリポジトリもビルドできる
β版につき無料
1ビルド最大25分という上限
スモールサービスなら現状の最適解(個人的結論)
閑話休題
Deploy Phase
nanapiにおける継続的インテグレーション
自動デプロイ
基本的にはMasterブランチへのマージで	
自動デプロイが走る
手動デプロイ
必要に応じてHubot経由の手動デプロイ
Deploy Phase
どんな小さな対応でも	
リリース完了はチームで共有
Agenda
Introduction
Continuous Integration
ChatOps
radicate a Continuous Integration
nanapiにおける継続的インテグレーション
GitHubが提唱
Hubotを介した共通タスク周りなどのワー
クフローのこと
(参考) ChatOps at GitHub
https://speakerdeck.com/jnewland/chatops-at-github
ChatOpsとは?
nanapiでの使い方の	
一例紹介
大事なことは明示的に通知
大事なことは明示的に通知
大事なことは明示的に通知
Pull Requestやテスト失敗など	
見逃したら困る情報は強制通知
コンテキストをチームで共有
コンテキストをチームで共有
コンテキストをチームで共有
同じコンテキストを共有した上での会話	
チーム全員で同じ情報・状態を共有
うれしいことも共有
うれしいことも共有
うれしいことも共有
楽しいこと、めでたいことはみんなで共有
ネタ系
ネタ系
ネタ系
ネタ系
ネタ系
ネタ系
ネタ系
ネタ系
ネタ要素にも
手を抜かない
nanapi_bot
Publicリポジトリで育ててます	
https://github.com/nanapi/nanapi_bot
Agenda
Introduction
Continuous Integration
ChatOps
radicate a Continuous Integration
継続的インテグレーションを	
チームに根付かせる
片手間で導入する
のは無理
http://bit.ly/Xzpvvd
導入までの道のり
やることは意外と多い
どのツール/サービスを使う?予算は?
コード解析系は?テストはどうする?
デプロイパイプラインはどう構築する?
どのプロセスまでをどの程度まで自動化する?
通知方法はどうする?
通常業務の合間を縫って導入するのは無理
導入までの道のり
やることは意外と多い
どのツール/サービスを使う?予算は?
コード解析系は?テストはどうする?
デプロイパイプラインはどう構築する?
どのプロセスまでをどの程度まで自動化する?
通知方法はどうする?
通常業務の合間を縫って導入するのは無理
チーム内で
コンセンサスを得る
社内のエヴァンジェ
リストになる
http://bit.ly/1onjmaL
上司が説得出来ない / 納得しない
ツールを導入したけどみんなが使ってくれ
ない
結果すぐ使わなくなってしまった
「想定した使い方をみんなしてくれない。
うちのチームには向いていなかった」
新規ツール導入あるある
上司が説得出来ない / 納得しない
ツールを導入したけどみんなが使ってくれ
ない
結果すぐ使わなくなってしまった
「想定した使い方をみんなしてくれない。
うちのチームには向いていなかった」
新規ツール導入あるある
「明日から○○使うからみんな使ってね」
では絶対に根付かない
エヴァンジェリストになる
誰よりもそのツールを使い、	
社内に広げていく
現状に満足せず、	
常に改善し続ける
http://bit.ly/WY27aC
IGNITIONの場合
チーム内導入予定
チーム内導入予定
Pull Request
チーム内導入予定
Pull Request
Trigger
チーム内導入予定
Pull Request
Trigger
Test
チーム内導入予定
Pull Request
Trigger
Trigger
Test
チーム内導入予定
Pull Request
Trigger
Trigger
Create
Staging
Test
チーム内導入予定
Pull Request
Trigger
Trigger
Notification
Create
Staging
Test
チーム内導入予定
Pull Request
Trigger
Trigger
Notification
Trigger
Create
Staging
Test
チーム内導入予定
Pull Request
Trigger
Trigger
Notification
Trigger
Screenshot
Create
Staging
Test
チーム内導入予定
Pull Request
Trigger
Trigger
Notification
Trigger
Screenshot
Create
Staging
Test
※Teatro.ioのAPI開発完了待ち
継続的インテグレーションは
一日にして成らず
http://bit.ly/1lvjxkp
Thank you!

More Related Content

nanapiにおける継続的インテグレーション