fastlane x iosアプリのci
TRANSCRIPT
Copyright © DeNA Co.,Ltd. All Rights Reserved.
AKIBA.swift 第 6 回2016/10/25(Tue)平田敏之 @DeNA
fastlane x iOS アプリの CI
Copyright © DeNA Co.,Ltd. All Rights Reserved.
自己紹介
平田 敏之 @DeNA⁃ 経歴• GW の開発 → ホムペサービスの開発、 iOS アプリの開発 → SWET
⁃ SWET(Software Engineer in Test)• 事業サポートチーム / テスト基盤チーム
• ミッション⁃ DeNA サービス全般の品質向上
⁃ DeNA エンジニアの開発生産性向上
⁃ 私がやっていること ( の一部 )• クライアントアプリ周りのテスト戦略、自動テストの開発
• CI/CD 環境整備
• テスト基盤環境の開発
• iOS Test Night 主催⁃ http://testnight.connpass.com/event/41323/
Copyright © DeNA Co.,Ltd. All Rights Reserved.
今日の発表の流れ
iOS x CI
CI でおこなうステップ
実際の CI 環境の設定⁃ Jenkins⁃ CircleCI
Copyright © DeNA Co.,Ltd. All Rights Reserved.
iOS x CI (1/2)
CI( 継続的インテグレーション )⁃ CD( 継続的デリバリー ) というのもありますが、まずは CI
CI( 継続的インテグレーション ) のメリット⁃ ( ある程度の ) 品質の維持• 何をおこなっているかに依存し変わる
⁃ 構成管理されたマシンによるビルド• 各バージョンが整っている ( はず )
⁃ 作業コストの削減• 手元で行っている作業を任せられる
⁃ 作業の形式知化• 手元で行っていた作業を CLI でおこなうことによる形式知化
⁃ 分析・改善のための情報の取得• ビルド時間の推移など
Copyright © DeNA Co.,Ltd. All Rights Reserved.
iOS x CI (2/2)
CI を得るために必要なこと⁃ 上司の許可• CI にはどうしてもコストがかかります ..
⁃ クラウド、オンプレのどちらにするかの判断• プロジェクトの規模、やりたいことを踏まえて判断
⁃ CLI 上での操作• CI 上で動作させるには必要
⁃ ★ 今回のメインはコチラ
CI があることにより得られるもの⁃ 安心感⁃ ファンの音がガンガンしない自マシン⁃ CI 環境の介護• クラウド、オンプレで介護の差はある ( 介護 0 は厳しい )
Copyright © DeNA Co.,Ltd. All Rights Reserved.
CI でおこなうステップ ( 例 )
アプリのビルド アプリのテスト 静的解析 (swiftLint) アプリの deploy(DeployGate / Crashlytics) iTunesConnect への upload AppStore のデータ更新 Slack に結果通知
Copyright © DeNA Co.,Ltd. All Rights Reserved.
CI でおこなうステップ x fastlane 無
fastlane を使わずに CI にのせようとすると
アプリのビルド ( 例 )⁃ xcodebuild –project xxxx.xcodeproj –target xxxxx –sdk
iphonesimulator –configuration Debug build
アプリのテスト ( 例 )⁃ xcodebuild –project xxxx.xcodeproj –scheme xxxxx –sdk
iphonesimulator –destination ’platform=iOS Simulartor, name=iPhone 6s’ test
Copyright © DeNA Co.,Ltd. All Rights Reserved.
CI でおこなうステップ x fastlane
アプリのビルド⁃ gym
アプリのテスト⁃ scan
静的解析 (swiftLint)⁃ swiftlint
アプリの deploy(DeployGate / Crashlytics)⁃ deploygate⁃ crashlytics
iTunesConnect への upload / AppStore のデータ更新⁃ deliver
Slack に結果通知⁃ slackSee: https://github.com/fastlane/fastlane/tree/master/fastlane/lib/fastlane/actions
Copyright © DeNA Co.,Ltd. All Rights Reserved.
CI でおこなうステップ x fastlane – 1st step
★ アプリのビルド⁃ gym
アプリのテスト⁃ scan
静的解析 (swiftLint)⁃ swiftlint
アプリの deploy(DeployGate / Crashlytics)⁃ deploygate⁃ crashlytics
iTunesConnect への upload / AppStore のデータ更新⁃ deliver
★Slack に結果通知⁃ slack
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Fastfile の用意
fastlane_version "1.105.3”
default_platform :ios
platform :ios do
before_all do
ENV[“SLACK_URL”] || = https://hooks.slack.com/..
cocoapods
end
desc ”build ipa file”
lane :build do
increment_build_number
gym(
workspace: “fastlane-sample.xcworkspace",
scheme: ”fastlane-sample",
configuration: ”Release",
clean: true,
use_legacy_build_api: true,
output_name: ”fastlane-sample.ipa",
)
end
error do |lane, exception|
slack(
message: exception.message,
success: false
)
end
end
fastlane/Fastfile の例
コマンド⁃ アプリのビルド• bundle exec fastlane build
失敗したら slack に post される
構成の例
- fastlane/Fastfile - Gemfile - Gemfile.lock - Podfile - Podfile.lock - fastlane-sample.xcodeproj
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Jenkins の設定の例 (1/2)
ビルドパラメータ⁃ 対象となる branch の設定
ソースコード管理⁃ Repository URL の指定⁃ Branch Specifier の指定
ソースコード管理の例
ビルドパラメータ
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Jenkins の設定の例 (2/2)ビルドの例
ビルド後の処理の例
ビルド手順の追加⁃ シェルの実行
ビルド後の処理の追加⁃ Junit テスト結果の集計⁃ 成果物を保存
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Jenkins の例 – 実行結果
Copyright © DeNA Co.,Ltd. All Rights Reserved.
CircleCI の例
machine:
xcode:
version: 7.3.1
environment:
XCODE_SCHEME: fastlane-sample
XCODE_WORKSPACE: fastlane-sample.xcworkspace
GYM_CODE_SIGNING_IDENTITY: “iPhone Distribution: XXXX XXXX(YYYY)”
dependencies:
test:
override:
- bundle exec fastlane build
post:
- cp fastlane/report.xml $CIRCLE_TEST_REPORTS
circle.yml の例
※iOS アプリでの利用は有料です ($39/month 〜 )
Copyright © DeNA Co.,Ltd. All Rights Reserved.
まとめ
fastlane を便利に使って CI を用意しましょう
ステップの全てを一気にやらず簡単なところから着手しましょう⁃ まずはアプリのビルドからはじめるのが良いです