travis and fastlane

21
TRAVIS CI

Upload: steven-shen

Post on 14-Aug-2015

129 views

Category:

Software


3 download

TRANSCRIPT

Page 1: Travis and fastlane

TRAVIS CI

Page 2: Travis and fastlane

% git add % git commit

% git push

Service hook

Mac VM Xcode

• Build • Test • Deploy • Notify

Page 3: Travis and fastlane

Setup

Availability

Speed

Easy Manual

Cloud Private network

DependsMedium

Trouble shooting Hard Easy

Cost Free for open source…..$129/month for private

repo

Page 4: Travis and fastlane

Setup

% gem install travis

% vim .travis.ymllanguage: objective-c script: - make notifications: email: false

Page 5: Travis and fastlane

all: xcodebuild -arch "i386" -configuration "Debug" -sdk "iphonesimulator" build | xcpretty

Page 6: Travis and fastlane

Code Sign

• Encrypt your keys, certificates, and provisioning profiles.

• Commit encrypted files to github

• Decrypt and install before build

Page 7: Travis and fastlane

% openssl aes-256-cbc -k "foo" -in certs/dist.cer -out certs/dist.cer.enc -a% openssl aes-256-cbc -k "foo" -in certs/dist.p12 -out certs/dist.p12.enc -a% openssl aes-256-cbc -k "foo" -in certs/dev.cer -out certs/dev.cer.enc -a% openssl aes-256-cbc -k "foo" -in certs/dev.p12 -out certs/dev.p12.enc -a% openssl aes-256-cbc -k “foo” -in certs/AppStore.mobileprovision -out certs/AppStore.mobileprovision.enc -a% openssl aes-256-cbc -k “foo” -in certs/AdHoc.mobileprovision -out certs/AdHoc.mobileprovision.enc -a

before_script:- openssl aes-256-cbc -k "$SECRET" -in certs/AdHoc.mobileprovision.enc -d -a -out certs/AdHoc.mobileprovision- openssl aes-256-cbc -k "$SECRET" -in certs/AppStore.mobileprovision.enc -d -a -out certs/AppStore.mobileprovision- openssl aes-256-cbc -k "$SECRET" -in certs/dist.cer.enc -d -a -out certs/dist.cer- openssl aes-256-cbc -k "$SECRET" -in certs/dist.p12.enc -d -a -out certs/dist.p12- openssl aes-256-cbc -k "$SECRET" -in certs/dist.cer.enc -d -a -out certs/dist.cer- openssl aes-256-cbc -k "$SECRET" -in certs/dist.p12.enc -d -a -out certs/dist.p12

Encrypt

Decrypt

Export

Page 8: Travis and fastlane

% travis encrypt “SECRET=foo” --add

env: global: - secure: eLo92Sw8KejuadMDTgY+bMAPow3D4zqkhBqXm8oUDctZn3qOJ5iJgMrNxfhSUx+AX/jiT07+U0vicHWRjGtkIGBeZJ8FVJL7NZQbIbqa80g0+MT4CNk4bumUphY0w+OOzsY8V4OKR90mUmzz3bVN8/ROFBZygeYBdiLnmhoQ93E= - secure: fGoTHN29GtCiux/aGJ2wm3NYtbyIRh0vnfoJafYdzWC6lj0PWrv0KVF31rHA56f7wPVLFnLrx2UhNzZHfMaavD9QSGVYNOcE2AVXuaRWnMrKmCjAkCW/7qnePwxcgcQTV+zQJTV523G4nDbWQMoQ9wugzTsxhj+Ob+ZF0cGEXUA=

Use command line

Page 9: Travis and fastlane

#!/bin/sh

# create keychain security create-keychain -p travis ios-build.keychain security default-keychain -s ios-build.keychain security unlock-keychain -p travis ios-build.keychain security set-keychain-settings -t 3600 -l ~/Library/Keychains/ios-build.keychain

# Certificate & Private key security import ./certs/cert.cer -k ~/Library/Keychains/ios-build.keychain -T /usr/bin/codesign security import ./certs/key.p12 -k ~/Library/Keychains/ios-build.keychain -P "$KEY_PASSWORD" -T /usr/bin/codesign

# Provisioning profiles mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles cp "./certs/AppStore.mobileprovision" ~/Library/MobileDevice/Provisioning\ Profiles/ cp "./certs/AdHoc.mobileprovision" ~/Library/MobileDevice/Provisioning\ Profiles/

Page 10: Travis and fastlane

language: objective-c osx_image: xcode6.4 before_install: - gem install fastlane before_script: - openssl aes-256-cbc -k "$SECRET" -in certs/EMQAppStore.mobileprovision.enc -d -a -out certs/EMQAppStore.mobileprovision - openssl aes-256-cbc -k "$SECRET" -in certs/EMQDev.mobileprovision.enc -d -a -out certs/EMQDev.mobileprovision - openssl aes-256-cbc -k "$SECRET" -in certs/cert.cer.enc -d -a -out certs/cert.cer - openssl aes-256-cbc -k "$SECRET" -in certs/dev-cert.cer.enc -d -a -out certs/dev-cert.cer - openssl aes-256-cbc -k "$SECRET" -in certs/key.p12.enc -d -a -out certs/key.p12 - openssl aes-256-cbc -k "$SECRET" -in certs/dev-key.p12.enc -d -a -out certs/dev-key.p12 - sh ./certs/install-keys.sh script: - make podfile: iOSApp/Podfile notifications: email: false slack: emq-inc:kPgGUXItHsgRsNtc77Fz3f3P env: global: - secure: OqyOY/I8QoucKb4uWY9xu9pkXgFoTahqiRl3BLOCJEbgKMKoUyDnk7N/ALktHp2S/NuB4zj5PNA50Lhb/zAnI7cTgZT0qEDJv2yDIM/j0wQFEHbKQafEHDWj2vAnook8OBpXiiykqWIb1dKgXCjzcEDjxhSo5V6V5IsdFHVAAew= - secure: gAw0juDvfHolj0zg93f2qnCFBxetvFIBTsMCgHMzStk0DyKrsh4IV+1x2CCqSFWo5q4EbXmsKKeyQKqfreIbbQTmZkAmXjIiVg70LDVgsqk5COWUTRgn21pUGWUFosxAkSZZghEf0o3Z62jA6FgeJkCkPcSLszuE0Qlbiq0SFSw= - secure: eLo92Sw8KejuadMDTgY+bMAPow3D4zqkhBqXm8oUDctZn3qOJ5iJgMrNxfhSUx+AX/jiT07+U0vicHWRjGtkIGBeZJ8FVJL7NZQbIbqa80g0+MT4CNk4bumUphY0w+OOzsY8V4OKR90mUmzz3bVN8/ROFBZygeYBdiLnmhoQ93E= - secure: fGoTHN29GtCiux/aGJ2wm3NYtbyIRh0vnfoJafYdzWC6lj0PWrv0KVF31rHA56f7wPVLFnLrx2UhNzZHfMaavD9QSGVYNOcE2AVXuaRWnMrKmCjAkCW/7qnePwxcgcQTV+zQJTV523G4nDbWQMoQ9wugzTsxhj+Ob+ZF0cGEXUA=

Page 11: Travis and fastlane
Page 12: Travis and fastlane
Page 13: Travis and fastlane

xcodebuild -arch "i386" -configuration "Debug" -sdk "iphonesimulator" build | xcprettyfastlane build

Page 14: Travis and fastlane

Setup

% sudo gem install fastlane

% fastlane init % vim fastlane/Appfile % vim fastlane/Fastfile

Page 15: Travis and fastlane

def unit_test xctest( workspace: 'EMQ.xcworkspace', scheme: 'EMQ-Demo', configuration: 'Demo', sdk: "iphonesimulator", arch: "i386", reports:[{ report: 'html', output: './test-report.html' }] )

slack( message: 'EMQ iOS App Unit Test', channel: '#dev-ios', default_payloads: [:test_result, :git_branch, :git_author, :last_git_commit], )

end

before_all do ENV["SLACK_URL"] = "https://hooks.slack.com/services/ABCDEFG/ABCDEFG/ABCDEFG"

clean_build_artifacts cocoapods end

Page 16: Travis and fastlane

lane :deliver_demo do

#increment_build_number sigh xcodebuild( workspace: 'EMQ.xcworkspace', configuration: 'Demo', scheme: 'EMQ-Demo', identity: 'iPhone Distribution: EMQ Limited (28HUT34N52)', clean: true ) unit_test xcarchive( workspace: 'EMQ.xcworkspace', configuration: 'Demo', scheme: 'EMQ-Demo', embed: '../certs/EMQAppStore.mobileprovision', identity: 'iPhone Distribution: EMQ Limited (28HUT34N52)' ) xcexport resign( ipa: 'EMQ-Demo.ipa', signing_identity: 'iPhone Distribution: EMQ Limited (28HUT34N52)', provisioning_profile: '../certs/EMQAppStore.mobileprovision', ) testflight(skip_deploy: true) end

Page 17: Travis and fastlane
Page 18: Travis and fastlane

all: ifeq ($(TRAVIS_PULL_REQUEST), false) fastlane test else agvtool new-version -all $(TRAVIS_BUILD_NUMBER) fastlane deliver_demo endif

Page 19: Travis and fastlane

xcodebuild -arch "i386" -configuration "Debug" -sdk "iphonesimulator" build | xcpretty

fastlane build

Trouble shooting

Page 20: Travis and fastlane
Page 21: Travis and fastlane

• Easy setup • No maintenance • Github integration • Bad for trouble shooting

• Automate your flows • Flexible, customizable • Life saver • Great for CI