fastlane x iosアプリのci

15
Copyright © DeNA Co.,Ltd. All Rights Reserved. AKIBA.swift 第 6 第 2016/10/25(Tue) 第第第第 @DeNA fastlane x iOS 第第第第 CI

Upload: toshiyuki-hirata

Post on 16-Apr-2017

635 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: fastlane x iOSアプリのCI

Copyright © DeNA Co.,Ltd. All Rights Reserved.

AKIBA.swift 第 6 回2016/10/25(Tue)平田敏之 @DeNA

fastlane x iOS アプリの CI

Page 2: 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/

Page 3: fastlane x iOSアプリのCI

Copyright © DeNA Co.,Ltd. All Rights Reserved.

今日の発表の流れ

iOS x CI

CI でおこなうステップ

実際の CI 環境の設定⁃ Jenkins⁃ CircleCI

Page 4: fastlane x iOSアプリのCI

Copyright © DeNA Co.,Ltd. All Rights Reserved.

iOS x CI (1/2)

CI( 継続的インテグレーション )⁃ CD( 継続的デリバリー ) というのもありますが、まずは CI

CI( 継続的インテグレーション ) のメリット⁃ ( ある程度の ) 品質の維持• 何をおこなっているかに依存し変わる

⁃ 構成管理されたマシンによるビルド• 各バージョンが整っている ( はず )

⁃ 作業コストの削減• 手元で行っている作業を任せられる

⁃ 作業の形式知化• 手元で行っていた作業を CLI でおこなうことによる形式知化

⁃ 分析・改善のための情報の取得• ビルド時間の推移など

Page 5: fastlane x iOSアプリのCI

Copyright © DeNA Co.,Ltd. All Rights Reserved.

iOS x CI (2/2)

CI を得るために必要なこと⁃ 上司の許可• CI にはどうしてもコストがかかります ..

⁃ クラウド、オンプレのどちらにするかの判断• プロジェクトの規模、やりたいことを踏まえて判断

⁃ CLI 上での操作• CI 上で動作させるには必要

⁃ ★ 今回のメインはコチラ

CI があることにより得られるもの⁃ 安心感⁃ ファンの音がガンガンしない自マシン⁃ CI 環境の介護• クラウド、オンプレで介護の差はある ( 介護 0 は厳しい )

Page 6: fastlane x iOSアプリのCI

Copyright © DeNA Co.,Ltd. All Rights Reserved.

CI でおこなうステップ ( 例 )

アプリのビルド アプリのテスト 静的解析 (swiftLint) アプリの deploy(DeployGate / Crashlytics) iTunesConnect への upload AppStore のデータ更新 Slack に結果通知

Page 7: fastlane x iOSアプリのCI

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

Page 8: fastlane x iOSアプリのCI

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

Page 9: fastlane x iOSアプリのCI

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

Page 10: fastlane x iOSアプリのCI

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

Page 11: fastlane x iOSアプリのCI

Copyright © DeNA Co.,Ltd. All Rights Reserved.

Jenkins の設定の例 (1/2)

ビルドパラメータ⁃ 対象となる branch の設定

ソースコード管理⁃ Repository URL の指定⁃ Branch Specifier の指定

ソースコード管理の例

ビルドパラメータ

Page 12: fastlane x iOSアプリのCI

Copyright © DeNA Co.,Ltd. All Rights Reserved.

Jenkins の設定の例 (2/2)ビルドの例

ビルド後の処理の例

ビルド手順の追加⁃ シェルの実行

ビルド後の処理の追加⁃ Junit テスト結果の集計⁃ 成果物を保存

Page 13: fastlane x iOSアプリのCI

Copyright © DeNA Co.,Ltd. All Rights Reserved.

Jenkins の例 – 実行結果

Page 14: fastlane x iOSアプリのCI

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 〜 )

Page 15: fastlane x iOSアプリのCI

Copyright © DeNA Co.,Ltd. All Rights Reserved.

まとめ

fastlane を便利に使って CI を用意しましょう

ステップの全てを一気にやらず簡単なところから着手しましょう⁃ まずはアプリのビルドからはじめるのが良いです