64
CONTINUOUS INTEGRATION iOS 9 Bootcamp #8 Classmethod, Inc Yuki Suwa

Xcode 7で始めるCI

Embed Size (px)

Citation preview

Page 1: Xcode 7で始めるCI

CONTINUOUS INTEGRATION

iOS 9 Bootcamp #8

Classmethod, IncYuki Suwa

Page 2: Xcode 7で始めるCI

YUKI SUWAMobile App Developer & Designer

Web App Engineer CTO, underscore Inc.

Page 3: Xcode 7で始めるCI

THANKS FOR YOUR COMING!

3

Page 4: Xcode 7で始めるCI

Agenda

CI と CD とは何か ?

Bots + Xcode 7 で始める CI

CI が導入できるようになる !

4

Page 5: Xcode 7で始めるCI

DO YOU KNOW CI ?

5

Page 6: Xcode 7で始めるCI

What is the CI ?

継続的インテグレーションのこと

プロジェクトの成果物を継続的に統合する習慣

統合、ビルド、テスト、インスペクションを継続的に行っていく

XPのプラクティスの1つ6

Page 7: Xcode 7で始めるCI

What is the CD ?

継続的デリバリのこと

プロジェクトの成果物を継続的に届ける習慣

CI と一緒に導入することが多い

7

Page 8: Xcode 7で始めるCI

WHY DO YOU NEED ?

8

Page 9: Xcode 7で始めるCI

Extreme Programming における 5 つの価値

9

Simplicity Communication

Feedback

Respect Courage

Communication

Feedback

Page 10: Xcode 7で始めるCI

10

Delivery Feedback

Page 11: Xcode 7で始めるCI

CI / CD のメリット

継続的なフィードバックが得られる

ビルドの手間を削減できる

品質の向上活動を支える

11

Page 12: Xcode 7で始めるCI

HOW TO BUILD CI

12

Page 13: Xcode 7で始めるCI

CI / CD Flow

13

Page 14: Xcode 7で始めるCI

CI / CD Tools & Services

14

Bots Jenkins

Page 15: Xcode 7で始めるCI

15

Bots

Page 16: Xcode 7で始めるCI

Apple 純正の CI ツール

Xcode プロジェクトを継続的に統合

Bots モニター (Web) がかっこいい

16

What is the Bots ?

Page 17: Xcode 7で始めるCI

17

Page 18: Xcode 7で始めるCI

BUT, BUILDING THE CI IS TROUBLESOME

18

Page 19: Xcode 7で始めるCI

CI 環境構築は煩わしい !

iOS アプリならではの証明書問題

ビルドエラーが追いづらい (ハマる)

サービス同士の連携が絡むと複雑

19

Page 20: Xcode 7で始めるCI

PROGRESSIVE BUILD

20

Page 21: Xcode 7で始めるCI

21

Page 22: Xcode 7で始めるCI

BUILD BOT

22

Page 23: Xcode 7で始めるCI

Bot を作るまで

ビルドマシンを用意する

OS X Server をインストールする

開発マシンで Bot の作成を行う

23

1

2

3

Page 24: Xcode 7で始めるCI

ビルドマシンを用意する

24

1

Page 25: Xcode 7で始めるCI

OS X Server をインストールする

App Store で ¥2,400 で購入可能

https://itunes.apple.com/jp/app/os-x-server/id883878097

Apple Developer であれば無償

https://developer.apple.com/osx/download/

25

2

Page 26: Xcode 7で始めるCI

26

Page 27: Xcode 7で始めるCI

27

Xcode を選択

Xcode Serverを有効化

Page 28: Xcode 7で始めるCI

28

Page 29: Xcode 7で始めるCI

開発マシンで Bot を作成する

29

3

Page 30: Xcode 7で始めるCI

30

Schemeを共有

Page 31: Xcode 7で始めるCI

31

Page 32: Xcode 7で始めるCI

32

どのタイミングで実行するか

Manual 手動でのみ実行する

Periodically 定期的に実行する

On Commit Pushされたら実行する

Page 33: Xcode 7で始めるCI

33

どのようなアクションを実行するか

Analyze ソースコードを解析する

Test テストを実行する

Archive アプリの作成を行う

Page 34: Xcode 7で始めるCI

34

プロジェクトをクリーンするか

Never クリーンしないAlways 毎回クリーンする

Once a day 1日1回クリーンするOnce a week 1週間に1回クリーンする

Page 35: Xcode 7で始めるCI

35

個別に指定できる

Page 36: Xcode 7で始めるCI

36

統合の前に実行

統合の後に実行

Page 37: Xcode 7で始めるCI

37

Page 38: Xcode 7で始めるCI

38

Page 39: Xcode 7で始めるCI

SHARING

39

Page 40: Xcode 7で始めるCI

40

Page 41: Xcode 7で始めるCI

Monitor Bots from a Web Browser

https://ci-machine-ip/xcode/bots/latest

Page 42: Xcode 7で始めるCI

42

Page 43: Xcode 7で始めるCI

43

ログなどをダウンロード可能

ビルドをマーク

Page 44: Xcode 7で始めるCI

44

Page 45: Xcode 7で始めるCI

ADVANCE

45

Page 46: Xcode 7で始めるCI

COVERAGE

46

Page 47: Xcode 7で始めるCI

Code Coverage

コード網羅率のこと

ソースコードがテストされた割合の指標

網羅率が高いほどバグの検出率が上がる

品質を左右する指標とも言える

47

Page 48: Xcode 7で始めるCI

48

有効化する

Page 49: Xcode 7で始めるCI

49

テストコードの網羅率

Page 50: Xcode 7で始めるCI

ANALYZE

50

Page 51: Xcode 7で始めるCI

Analyze with Xcode

Xcode の Analyze 機能による静的解析を実行可能

メモリリークや null ポインタへのアクセスなど潜在的なバグを検出

51

Page 52: Xcode 7で始めるCI

52

有効化する

Page 53: Xcode 7で始めるCI

DELIVERY

53

Page 54: Xcode 7で始めるCI

継続的なデリバリ

Bots で iOS デバイスにインストール可能な

IPA を作成可能

iOS デバイスで直接インストール可能

54

Page 55: Xcode 7で始めるCI

55

チームを追加

Page 56: Xcode 7で始めるCI

56

有効化する

Page 57: Xcode 7で始めるCI

57

Page 58: Xcode 7で始めるCI

OTHER

58

Page 59: Xcode 7で始めるCI

59

統合の前に実行

統合の後に実行

Page 60: Xcode 7で始めるCI

例えば…

CocoaPods の利用

ビルド結果をチャットに通知

60

などなど…

自由に拡張可能です!!

Page 61: Xcode 7で始めるCI

Xcode CI Script Variables

https://gist.github.com/quellish/f279f7b00c1bfd343468

Page 62: Xcode 7で始めるCI

SUMMARY

62

Page 63: Xcode 7で始めるCI

まとめ

CI / CD やろうよ

最初から全部はできないから、できるところから始めた方が良いよ

総合的に考えると効率的だよ

機械的な作業を自動化し、価値のある作業に集中しよう!

63

Page 64: Xcode 7で始めるCI