fastlane for androidによる継続的デリバリー

34
Fastlane for Android による継続的デリバリー Fumiya Nakamura / @nafu003

Upload: fumiya-nakamura

Post on 11-Apr-2017

4.724 views

Category:

Software


1 download

TRANSCRIPT

Fastlane for Androidによる継続的デリバリー

Fumiya Nakamura / @nafu003

ライブ共有型スポーツアプリ 「Player!(プレイヤー)」

株式会社ookami

すべてのスポーツを

スマホで

リアルで

一つの場所で

ライブの熱狂を いつでもどこでも

電車の中でもTVがなくても、これからはスポーツをいつでもどこでも。

スポーツニュースを まとめ読み

あなたのかわりに、あなたがほしいニュースをさがしてきます。

専門家や著名人も使う スポーツSNS

世界中にコメンテーターがいます。あなたもその一人かもしれません。

サービス概要

https://github.com/fastlane/fastlane

4

https://github.com/fastlane/fastlane/releases/tag/1.34.0

5

fastlane

• Use fastlane to

1. Build using gradle

2. Beta Distribution

3. Upload builds and metadata to Google Play

6

fastlane

• Use fastlane to

1. Build using gradle

2. Beta Distribution

3. Upload builds and metadata to Google Play

7

Build

Distribution

Import

8

Workflow

9

Workflow

Push

10

Beta Distribution

• Tools

• Fabric (Crashlytics Beta)

• Fastlane

• CircleCI

11

Beta Distribution

• Tools

• Fabric (Crashlytics Beta)

• Fastlane

• CircleCI

12

Beta Distribution

13

fastlane / Fastfile

Build

Distribution

Import

lane :beta do # Build gradle(task: “assembleStaging”)

# Push to Crashlytics crashlytics( groups: “developer”, notifications: false )

# Post to Slack slack( message: “Successfully deployed new App Update.” ) end

Beta Distribution

14

fastlane / Fastfile

Build

Distribution

Import

lane :beta do # Build gradle(task: “assembleStaging”)

# Push to Crashlytics crashlytics( groups: “developer”, notifications: false )

# Post to Slack slack( message: “Successfully deployed new App Update.” ) end

Beta Distribution

15

fastlane / Fastfile

Build

Distribution

Import

lane :beta do # Build gradle(task: “assembleStaging”)

# Push to Crashlytics crashlytics( groups: “developer”, notifications: false )

# Post to Slack slack( message: “Successfully deployed new App Update.” ) end

Beta Distribution

16

fastlane / Fastfile

Build

Distribution

Import

lane :beta do # Build gradle(task: “assembleStaging”)

# Push to Crashlytics crashlytics( groups: “developer”, notifications: false )

# Post to Slack slack( message: “Successfully deployed new App Update.” ) end

Beta Distribution

17

fastlane / Fastfile

Build

Distribution

Import

lane :beta do # Build gradle(task: “assembleStaging”)

# Push to Crashlytics crashlytics( groups: “developer”, notifications: false )

# Post to Slack slack( message: “Successfully deployed new App Update.” ) end

Action

Action

Action

Beta Distribution

• Tools

• Fabric (Crashlytics Beta)

• Fastlane

• CircleCI

18

• Execute workflows with fastlanemachine: java: version: openjdk7 ruby: version: 2.2.3 dependencies: pre: - echo y | android update sdk --no-ui --al--filter tool,extra-android-m2repository,extra-android-support,extra-google-google_play_services,extra-google-m2repository,android-23 - echo y | android update sdk --no-ui --al --filter build-tools-23.0.2 deployment: beta: branch: master commands: - bundle exec fastlane beta

Beta Distributioncircle.yml

https://circleci.com/docs/configuration

• Execute workflows with fastlanemachine: java: version: openjdk7 ruby: version: 2.2.3 dependencies: pre: - echo y | android update sdk --no-ui --al--filter tool,extra-android-m2repository,extra-android-support,extra-google-google_play_services,extra-google-m2repository,android-23 - echo y | android update sdk --no-ui --al --filter build-tools-23.0.2 deployment: beta: branch: master commands: - bundle exec fastlane beta

Beta Distributioncircle.yml

Configure the virtual machine

https://circleci.com/docs/configuration

• Execute workflows with fastlanemachine: java: version: openjdk7 ruby: version: 2.2.3 dependencies: pre: - echo y | android update sdk --no-ui --al--filter tool,extra-android-m2repository,extra-android-support,extra-google-google_play_services,extra-google-m2repository,android-23 - echo y | android update sdk --no-ui --al --filter build-tools-23.0.2 deployment: beta: branch: master commands: - bundle exec fastlane beta

Beta Distributioncircle.yml

Specify dependencies

https://circleci.com/docs/configuration

• Execute workflows with fastlanemachine: java: version: openjdk7 ruby: version: 2.2.3 dependencies: pre: - echo y | android update sdk --no-ui --al--filter tool,extra-android-m2repository,extra-android-support,extra-google-google_play_services,extra-google-m2repository,android-23 - echo y | android update sdk --no-ui --al --filter build-tools-23.0.2 deployment: beta: branch: master commands: - bundle exec fastlane beta

Beta Distributioncircle.yml

Deploy using fastlane

https://circleci.com/docs/configuration

fastlane

• Use fastlane to

1. Build using gradle

2. Beta Distribution

3. Upload builds and metadata to Google Play

23

Release Distribution

24

fastlane / Fastfile

Build

Distribution

Import

lane :deploy do # Generate key files dir = “./fastlane/certs” add_key( keystore_path: File.join(dir, “release.keystore”), play_p12_path: File.join(dir, “play.p12”) )

# Build gradle(task: “assembleRelease”)

# Upload to Google Play supply( track: “alpha” )

# Delete key files remove_key end

Release Distribution

25

fastlane / Fastfile

Build

Distribution

Import

lane :deploy do # Generate key files dir = “./fastlane/certs” add_key( keystore_path: File.join(dir, “release.keystore”), play_p12_path: File.join(dir, “play.p12”) )

# Build gradle(task: “assembleRelease”)

# Upload to Google Play supply( track: “alpha” )

# Delete key files remove_key end

Release Distribution

26

fastlane / Fastfile

Build

Distribution

Import

lane :deploy do # Generate key files dir = “./fastlane/certs” add_key( keystore_path: File.join(dir, “release.keystore”), play_p12_path: File.join(dir, “play.p12”) )

# Build gradle(task: “assembleRelease”)

# Upload to Google Play supply( track: “alpha” )

# Delete key files remove_key end

Release Distribution

27

fastlane / Fastfile

Build

Distribution

Import

lane :deploy do # Generate key files dir = “./fastlane/certs” add_key( keystore_path: File.join(dir, “release.keystore”), play_p12_path: File.join(dir, “play.p12”) )

# Build gradle(task: “assembleRelease”)

# Upload to Google Play supply( track: “alpha” )

# Delete key files remove_key end

Release Distribution

28

fastlane / Appfile

# Follow https://github.com/fastlane/supply#setup to get one issuer “[email protected]” # Path to the keyfile keyfile “./fastlane/certs/play.p12" # e.g. com.krausefx.app package_name “your.package.name”

• Setup for connecting to Google Play

Release Distribution

29

fastlane / Fastfile

Build

Distribution

Import

lane :deploy do # Generate key files dir = “./fastlane/certs” add_key( keystore_path: File.join(dir, “release.keystore”), play_p12_path: File.join(dir, “play.p12”) )

# Build gradle(task: “assembleRelease”)

# Upload to Google Play supply( track: “alpha” )

# Delete key files remove_key end

Release Distribution

30

fastlane / Fastfile

Build

Distribution

Import

lane :deploy do # Generate key files dir = “./fastlane/certs” add_key( keystore_path: File.join(dir, “release.keystore”), play_p12_path: File.join(dir, “play.p12”) )

# Build gradle(task: “assembleRelease”)

# Upload to Google Play supply( track: “alpha” )

# Delete key files remove_key end

Custom Action

Custom Action

Release Distribution

31

fastlane / Fastfile - Custom Actionmodule Fastlane module Actions class AddKeyAction < Action def self.run(params) keystore_path = params[:keystore_path] play_p12_path = params[:play_p12_path] encryption_secret = ENV["ENCRYPTION_SECRET"] sh "openssl aes-256-cbc -k #{encryption_secret} -in #{keystore_path}.enc -d -a -out #{keystore_path}" sh "openssl aes-256-cbc -k #{encryption_secret} -in #{play_p12_path}.enc -d -a -out #{play_p12_path}" end end end end

module Fastlane module Actions class RemoveKeyAction < Action def self.run(params) sh "rm -rf fastlane/certs" end end end end

Release Distribution

32

fastlane / metadatafastlane ├── Appfile ├── Fastfile ├── actions │   ├── add_key.rb │   └── remove_key.rb ├── certs │   ├── play.p12.enc │   └── release.keystore.enc └── metadata    └── android    └── ja-JP    ├── full_description.txt    ├── images    │   ├── featureGraphic.png    │   ├── icon.png    │   ├── phoneScreenshots    │   │   ├── 1.jpeg    │   │   └── 2.jpeg    │   ├── sevenInchScreenshots    │   ├── tenInchScreenshots    │   ├── tvScreenshots    │   └── wearScreenshots    ├── short_description.txt    ├── title.txt    └── video.txt

fastlane

• Use fastlane to

1. Build using gradle

2. Beta Distribution

3. Upload builds and metadata to Google Play

33

WE ARE HIRING!