79
Hello. Continuous Integration

Hello. Continuous Integration

Embed Size (px)

Citation preview

Hello.Continuous Integration

WHO?• 松村 勇輝 @Yuki_312

• Yukiの枝折. http://yuki312.blogspot.jp/

• Android Developer

QUESTION

QUESTION統合作業…

チーム内のソースコードを

集約, ビルド, テストする.

QUESTION✓ 最新のソースコードを集約してビルドされる

✓ 最新のソースコードを集約してビルドされる

✓ 全てがクリーンな状態でビルドされる

QUESTION

✓ 最新のソースコードを集約してビルドされる

✓ 全てがクリーンな状態でビルドされる

✓ 成果物は実行可能な状態で作られる

QUESTION

✓ 最新のソースコードを集約してビルドされる

✓ 全てがクリーンな状態でビルドされる

✓ 成果物は実行可能な状態で作られる

✓ テストにパスしたことを確認できる

QUESTION

✓ 最新のソースコードを集約してビルドされる

✓ 全てがクリーンな状態でビルドされる

✓ 成果物は実行可能な状態で作られる

✓ テストにパスしたことを確認できる

✓ 全てのステップが成功し自動実行である

QUESTION

✓ 最新のソースコードを集約してビルドされる

✓ 全てがクリーンな状態でビルドされる

✓ 成果物は実行可能な状態で作られる

✓ テストにパスしたことを確認できる

✓ 全てのステップが成功し自動実行である

✓ 上記が1日に何度も頻繁に行われる

QUESTION

QUESTION

Hello.Continuous Integration

CONTENTS• 生産性とインテグレーション

• 継続的インテグレーション

• Get Started

• デモンストレーション

• CI as a Service

PRODUCTIVITY

PRODUCTIVITY• 生産性 = Output / Input

PRODUCTIVITY• 生産性 = Output / Input

• 少ない投資で大きな価値を

PRODUCTIVITY• 生産性 = Output / Input

• 少ない投資で大きな価値を

• 同じ品質をより短い時間で

PRODUCTIVITY• 生産性 = Output / Input

• 少ない投資で大きな価値を

• 同じ品質をより短い時間で

• 贅肉を削ぎ落とすこと

INTEGRATION

INTEGRATION• commit

INTEGRATION• commit

• build

INTEGRATION• commit

• build

• test

INTEGRATION• commit... conflict.

• build

• test

INTEGRATION• commit... conflict.

• build... error.

• test

INTEGRATION• commit... conflict.

• build... error.

• test... failed.

INTEGRATION• インテグレーションは面倒な作業

• Milestone/Weekly/Daily Buildが辛い

• 頻繁な統合テストはコストがかさむ

• 統合テストで発見される不具合は厄介

BEST PRACTICE

BEST PRACTICE

“頻繁にインテグレーションする”

BEST PRACTICE

基本的かつ重要な

“完全に自働化されたビルドとテスト”

AUTOMATION• 頻繁なインテグレーションが実現可能

• よりアトミックなインテグレーション

• インテグレーションに伴う面倒を解消

BAD PRACTICE

BAD PRACTICE

BAD PRACTICE“ある機能のバグが他に影響しているが,

互いの機能開発者達はその事実に気づかない.

相互作用の中に潜むバグの発見は難しく,

原因特定には長い時間が費やされる. ”

-Martin Fowler-

BAD PRACTICE

インテグレーションの間隔が空くほど,

統合のトータルコストが増し生産性は悪化する.

CI

“すべてが自動化された, 再現可能な

ビルド(とテスト)を, 日に何度も行うこと”

-Martin Fowler-

BEST PRACTICE

頻繁な統合は検証の機会を増やし,

統合に伴う問題を低減する.

NOT CI

NOT CI• 統合ビルドはする... が, 通らない

NOT CI• 統合ビルドはする... が, 通らない

• ビルドは成功する... が, テストにパスしない

BUILD SUCCESSFUL

BUILD SUCCESSFUL✓ 最新のコードを全てチェックアウトした

BUILD SUCCESSFUL✓ 最新のコードを全てチェックアウトした

✓ 全てがクリーンな状態でビルドした

BUILD SUCCESSFUL✓ 最新のコードを全てチェックアウトした

✓ 全てがクリーンな状態でビルドした

✓ 成果物を実行可能な状態で生成した

BUILD SUCCESSFUL✓ 最新のコードを全てチェックアウトした

✓ 全てがクリーンな状態でビルドした

✓ 成果物を実行可能な状態で生成した

✓ テストスイートにパスした

BUILD SUCCESSFUL✓ 最新のコードを全てチェックアウトした

✓ 全てがクリーンな状態でビルドした

✓ 成果物を実行可能な状態で生成した

✓ テストスイートにパスした

✓ 全てのSTEPがエラーもなく自動実行された

PROBLEM

PROBLEM• Single Source Point

PROBLEM• Single Source Point

• Workflow

PROBLEM• Single Source Point

• Workflow

• Build Script

PROBLEM• Single Source Point

• Workflow

• Build Script

• Testing Framework

• Single Source PointGit

• Workflow

• Build Script

• Testing Framework

PROBLEM

• Single Source PointGit

• WorkflowGitHub-Flow, PR Driven

• Build Script

• Testing Framework

PROBLEM

• Single Source PointGit

• WorkflowGitHub-Flow, PR Driven

• Build ScriptGradle

• Testing Framework

PROBLEM

• Single Source PointGit

• WorkflowGitHub-Flow, PR Driven

• Build ScriptGradle

• Testing FrameworkJUnit, Espresso

PROBLEM

GET STARTED

GET STARTED

“すべてが自動化された, 再現可能な

ビルド(とテスト)を, 日に何度も行うこと”

-Martin Fowler-

GET STARTED???

“すべてが自動化された, 再現可能な

ビルド(とテスト)を, 日に何度も行うこと”

-Martin Fowler-

GET STARTED“すべてが自動化された, 再現可能な

ビルド(とテスト)を, 日に何度も行うこと”

GET STARTED“すべてが自動化された, 再現可能な

ビルド(とテスト)を, 日に何度も行うこと”

今回はテストのフェーズをスキップ

GET STARTED“すべてが自動化された, 再現可能な

ビルド(とテスト)を, 日に何度も行うこと”

自動化された, 再現可能なビルドを,

日に何度も行うこと

GET STARTED“すべてが自動化された, 再現可能な

ビルド(とテスト)を, 日に何度も行うこと”

自動化された, 再現可能なビルドを,

日に何度も行うこと

BUILD SUCCESSFUL✓ 最新のコードを全てチェックアウトした

✓ 全てがクリーンな状態でビルドした

✓ 成果物を実行可能な状態で生成した

✓ テストスイートにパスした

✓ 全てのSTEPがエラーもなく自動実行された

BUILD SUCCESSFUL✓ 最新のコードを全てチェックアウトした

✓ 全てがクリーンな状態でビルドした

✓ 成果物を実行可能な状態で生成した

✓ テストスイートにパスした

✓ 全てのSTEPがエラーもなく自動実行された

GET STARTED

GET STARTED

CIaaSContinuous Integration as a Service

CI AS A SERVICE• CI自動化支援

• 老舗のCIソフトウェア – Jenkins

• 老舗のCIサービス – Travis CI

• その他CIサービス – Circle CI, Codeship, etc.

• エンジンとなってプロジェクトを加速する

CIRCLE CI

CIRCLE CI• AWS + LXC のコンテナ運用

• CIサーバ運用は不要

• YAMLによるタスク管理

• SSHによるリモート接続可

• Dockerをサポート

• 安価で軽い

SUPPORT• Collaboration

GitHub (BitBucket, GitLab is not supported)

• LanguageRuby, Python, Node.js, PHP, Java, Haskell, Scala

• PlatformAndroid, iOS

DEMONSTRATION

ANTI PATTERN

ANTI PATTERN• 肥満リポジトリ

コンテナの初期化がボトルネックになる

ANTI PATTERN• 肥満リポジトリ

コンテナの初期化がボトルネックになる

• 複数のプロダクト

ビルドが別プロダクトのビルドを待たせる

ANTI PATTERN• 肥満リポジトリ

コンテナの初期化がボトルネックになる

• 複数のプロダクト

ビルドが別プロダクトのビルドを待たせる

• 過度なPush不必要なPushでビルド待ち行列を発生させる

KEEP FASTER• CIの速度はプロジェクトの速度

• ビルドの待ち行列が発生しないように

• ビルドの成功条件を厳守する

• 課金重要

PRICE – CIRCLE CI• Public, Privateに関わらず1 container 無料

• 1 container(parallelism) $50/month

• レポジトリ数 無制限

• ユーザ数 無制限

• ビルド時間 無制限

PRICE – GITHUB• Organization plans - Bronze

• Publicリポジトリ 無料&無制限

• 10 Privateリポジトリ $25/month

• メンバー数 無制限

CONCLUSION• インテグレーションは自動化

• 頻繁にインテグレーションする

• 自動化にはCIaaSを使う

• CIaaSを試すにはCircleCIがおすすめ

• GitHubも忘れずに

• 慣れたらテストスイートを追加していく

以上.

ありがとうございました