iOS
Jenkins
CI
fabric
fastlane

iOS のツイッタークライアント feather の CI の歴史

More than 2 years have passed since last update.

この記事は モバイルCIダベリNight の資料です。

iOS 版 feather の CI の歴史

iOS 版 feather の CI が
どのような歴史を辿ってきたのかを紹介します。

2013年9月〜 (feather 開発開始)

  • ちょい古めの MacBook Pro で Jenkins 動かしてた
  • Jenkins のプラグインを使って CI してた
  • レビュー用に TestFlight を使ってアルファ版を開発者に配布

良かったことや辛かったこと

  • Jenkins にはプラグインが沢山用意されてて環境構築が楽
  • 開発当初からプルリク -> CI -> レビュー の体制が作れて最高
  • Jenkins を動かしてるマシンが機嫌を損ねると何もできなくなる
  • Jenkins のプラグインに頼りまくってるので Travis とかに移行することができない
  • テスト件数増えると CI に20分とかかかって辛い
    • テスト件数増える = コードの量も増えるのでコンパイルの時間も増える
    • よく覚えてないけどテスト件数 1000件ぐらいになると辛かった

2015年2月〜

この時に過去の負債を一気に消し去った。

アルファ版配布

旧 TestFlight が 2/26 でサービス終了なので代替として fabric を採用した。
Crashlytics を使っていたのでその流れで fabric を採用。

ベータテスター導入

feather の機能が多くなりすぎて自分たちではチェックしきれなくなったので
アルファ版と同様に fabric でベータ版も配布するようにした

Jenkins のプラグインを使わないようにした

make で CI プロセスを書いて Jenkins のサーバが壊れてても同じことがローカルできるようにした。
Jenkins では make のコマンドを叩くだけ。

iTunesConnect で毎晩 validate

変な API 使っちゃって申請できないことが後になって発覚すると辛いので
ナイトリービルドした IPAを iTunesConnect で validate することで
おかしなことになっていないのかを毎晩確認して安心感上げた。

CI マシンの新調

お金なくてずっと買えなかったけど、この辺りで少し余裕ができたので Mac mini を買いました。
20分以上かかってた CI プロセスが 10分以内で終わるようになりました。

良かったことや辛かったこと

  • CI サーバ落ちててもローカルで make hogehoge 的なことすれば CI プロセスをローカルで実行できるので最高
  • ベータテスター導入してリリース時の安心感が増した
  • Makefile と シェルスクリプトで頑張るのは辛い
    • 秘伝のタレみたいになるので誰も弄れないものになる

2015年6月〜

make やめて rake にした

  • Makefile 書くの大変だったので rake を使うことにした
  • 楽ちん

良かったことや辛かったこと

  • Rakefile 書きやすい
    • 中に ruby かけるのでいろいろ楽
    • make って難しくないですか?

2015年7月〜

TestFlight の External Tester を使うようになった

  • もっとたくさんの人でテストをする必要があると感じた
  • iTunesConnect に submit する仕組みはあったので導入楽

2015年10月〜

fastlane 使い始めた

xcodebuild のオプションの指定の仕方とか変わって若干の面倒臭があった。

具体的には

xcodebuild: WARNING: -exportArchive without -exportOptionsPlist is deprecated

という警告が出るようになった。

fastlane はその辺の仕様変更を内部で吸収してくれるので最高だと思った。

良かったことや辛かったこと

  • 新しい物に触れることができて楽しかった
  • こんな問題が発生して辛かった
  • fastlane は起動が遅いから rake と組み合わせるといいかも
    • 起動が遅いのは before_all とかで色々やってる場合
    • 何でもかんでも fastlane でやらない姿勢が大事

補足

現状(2015年11月)の feather の CI

動作環境

  • 社内に置いてある mac mini の Jenkins で動いている
  • 何もしてないので社外のネットワークからはアクセスできない

IMG_7121.jpg

回している CI の種類

iOS 版 feather では以下の2種類の CI プロセスが動いている。

  • テストの CI プロセス
    • プルリクエスト & プルリクエストへの新規 push のたびに動く
    • テストを実行
    • アルファを fabric で配布
  • ナイトリービルドの CI プロセス
    • テストを実行
    • ベータ版を fabric に配信
    • 新しいバイナリを iTunesConnect に submit

テスターの種類

iOS 版 feather では以下の3種類の IPA を作っている。

  • アルファ版
    • 社内テスター向けに fabric で配信
    • 主にプルリクエストのレビュー用
  • ベータ版
    • 社外テスター向けに fabric で配信
    • 1週間に1、2回程度配布。
    • テスターは 10人ぐらいいる
  • TestFlight 版
    • 社外テスター向けに iTunesConnect の TestFlight で配信
    • リリース前に 申請に使用したものと同じIPA を配布して申請が通るまで使ってもらう
    • テスターは 200人程度