More Related Content Similar to Intro to Continuous Integration at SoundCloud (20) Intro to Continuous Integration at SoundCloud4. “Continuous integration (CI)
is the practice, in software
engineering, of merging all
developer working copies
with a shared mainline
several times a day.”
http://en.wikipedia.org/wiki/Continuous_integration
16. • move fast
• keep codebase healthy
• ship reliable apps
17. • move fast
• keep codebase healthy
• ship reliable apps
20. • started from scratch
• months in development
• millions of users
21. iOS Crash Complaints (avg per Week)
140
105
70
35
0
April May June July August
SoundCloud community team
25. • run unit test suite
• α and β versions
• sign .app builds
28. require 'rake'
!
desc 'say Hello World!'
task :hello do
puts 'Hello World!'
end
29. require 'rake'
!
desc 'say Hello World!'
task :hello do
puts 'Hello World!'
end
30. require 'rake'
!
desc 'say Hello World!'
task :hello do
puts 'Hello World!'
end
31. require 'rake'
!
desc 'say Hello World!'
task :hello do
puts 'Hello World!'
end
57. defaults: &DEFAULTS
app: &APP_DEFAULTS
workspace: ci.xcworkspace
scheme: ci
configuration: Release
display_name: ci-test
bundle_identifier: com.company.ci-test
codesign: &CODESIGN_DEFAULTS
signing_identity: '"iPhone Distribution: Vincent Garrigues (X73EL3QFZB)"'
provisioning_profile: provisioning/app_store.mobileprovision
58. defaults: &DEFAULTS
app: &APP_DEFAULTS
workspace: ci.xcworkspace
scheme: ci
configuration: Release
display_name: ci-test
bundle_identifier: com.company.ci-test
codesign: &CODESIGN_DEFAULTS
signing_identity: '"iPhone Distribution: Vincent Garrigues (X73EL3QFZB)"'
provisioning_profile: provisioning/app_store.mobileprovision
59. defaults: &DEFAULTS
app: &APP_DEFAULTS
workspace: ci.xcworkspace
scheme: ci
configuration: Release
display_name: ci-test
bundle_identifier: com.company.ci-test
codesign: &CODESIGN_DEFAULTS
signing_identity: '"iPhone Distribution: Vincent Garrigues (X73EL3QFZB)"'
provisioning_profile: provisioning/app_store.mobileprovision
60. defaults: &DEFAULTS
app: &APP_DEFAULTS
workspace: ci.xcworkspace
scheme: ci
configuration: Release
display_name: ci-test
bundle_identifier: com.company.ci-test
codesign: &CODESIGN_DEFAULTS
signing_identity: '"iPhone Distribution: Vincent Garrigues (X73EL3QFZB)"'
provisioning_profile: provisioning/app_store.mobileprovision
61. defaults: &DEFAULTS
app: &APP_DEFAULTS
workspace: ci.xcworkspace
scheme: ci
configuration: Release
display_name: ci-test
bundle_identifier: com.company.ci-test
codesign: &CODESIGN_DEFAULTS
signing_identity: '"iPhone Distribution: Vincent Garrigues (X73EL3QFZB)"'
provisioning_profile: provisioning/app_store.mobileprovision
62. defaults: &DEFAULTS
app: &APP_DEFAULTS
workspace: ci.xcworkspace
scheme: ci
configuration: Release
display_name: ci-test
bundle_identifier: com.company.ci-test
codesign: &CODESIGN_DEFAULTS
signing_identity: '"iPhone Distribution: Vincent Garrigues (X73EL3QFZB)"'
provisioning_profile: provisioning/app_store.mobileprovision
63. defaults:
(..)
!
alpha:
<<: *DEFAULTS
app:
<<: *APP_DEFAULTS
display_name: α
bundle_identifier: com.company.ci-test-alpha
codesign:
<<: *CODESIGN_DEFAULTS
provisioning_profile: provisioning/alpha.mobileprovision
64. defaults:
(..)
!
alpha:
<<: *DEFAULTS
app:
<<: *APP_DEFAULTS
display_name: α
bundle_identifier: com.company.ci-test-alpha
codesign:
<<: *CODESIGN_DEFAULTS
provisioning_profile: provisioning/alpha.mobileprovision
65. defaults:
(..)
!
alpha:
<<: *DEFAULTS
app:
<<: *APP_DEFAULTS
display_name: α
bundle_identifier: com.company.ci-test-alpha
codesign:
<<: *CODESIGN_DEFAULTS
provisioning_profile: provisioning/alpha.mobileprovision
72. xcrun -v
-sdk iphoneos
PackageApplication
ci-test-alpha.app
-o ci-test-alpha.ipa
--sign "iPhone Distribution: Vincent Garrigues"
--embed provisioning/alpha.mobileprovision
73. xcrun -v
-sdk iphoneos
PackageApplication
ci-test-alpha.app
-o ci-test-alpha.ipa
--sign "iPhone Distribution: Vincent Garrigues"
--embed provisioning/alpha.mobileprovision
74. xcrun -v
-sdk iphoneos
PackageApplication
ci-test-alpha.app
-o ci-test-alpha.ipa
--sign "iPhone Distribution: Vincent Garrigues"
--embed provisioning/alpha.mobileprovision
75. xcrun -v
-sdk iphoneos
PackageApplication
ci-test-alpha.app
-o ci-test-alpha.ipa
--sign "iPhone Distribution: Vincent Garrigues"
--embed provisioning/alpha.mobileprovision
76. xcrun -v
-sdk iphoneos
PackageApplication
ci-test-alpha.app
-o ci-test-alpha.ipa
--sign "iPhone Distribution: Vincent Garrigues"
--embed provisioning/alpha.mobileprovision
77. xcrun -v
-sdk iphoneos
PackageApplication
ci-test-alpha.app
-o ci-test-alpha.ipa
--sign "iPhone Distribution: Vincent Garrigues"
--embed provisioning/alpha.mobileprovision
78. xcrun -v
-sdk iphoneos
PackageApplication
ci-test-alpha.app
-o ci-test-alpha.ipa
--sign "iPhone Distribution: Vincent Garrigues"
--embed provisioning/alpha.mobileprovision
79. xcrun -v
-sdk iphoneos
PackageApplication
ci-test-alpha.app
-o ci-test-alpha.ipa
--sign "iPhone Distribution: Vincent Garrigues"
--embed provisioning/alpha.mobileprovision
84. • rake build sign BUILD_ENV=alpha
• rake build sign BUILD_ENV=beta
• rake build sign BUILD_ENV=adhoc
85. • rake build sign BUILD_ENV=alpha
• rake build sign BUILD_ENV=beta
• rake build sign BUILD_ENV=adhoc
86. • rake build sign BUILD_ENV=alpha
• rake build sign BUILD_ENV=beta
• rake build sign BUILD_ENV=adhoc
87. • rake build sign BUILD_ENV=alpha
• rake build sign BUILD_ENV=beta
• rake build sign BUILD_ENV=adhoc
• rake build sign BUILD_ENV=appstore
90. rake build BUILD_ENV=appstore
rake ipa BUILD_ENV=appstore
ci-test-appstore.app
ci-test-appstore.dSYM
ci-test-appstore.dSYM.zip
ci-test-appstore.ipa
91. rake build BUILD_ENV=appstore
rake ipa BUILD_ENV=appstore
rake ipa BUILD_ENV=adhoc
ci-test-appstore.app
ci-test-appstore.dSYM
ci-test-appstore.dSYM.zip
ci-test-appstore.ipa
ci-test-adhoc.ipa
92. rake build BUILD_ENV=appstore
rake ipa BUILD_ENV=appstore
rake ipa BUILD_ENV=adhoc
ci-test-appstore.app
ci-test-appstore.dSYM
ci-test-appstore.dSYM.zip
ci-test-appstore.ipa
ci-test-adhoc.ipa
93. rake build BUILD_ENV=appstore
rake ipa BUILD_ENV=appstore
rake ipa BUILD_ENV=adhoc
ci-test-appstore.app
ci-test-appstore.dSYM
ci-test-appstore.dSYM.zip
ci-test-appstore.ipa
ci-test-adhoc.ipa
97. • linter (Xcode project, data
model, acceptance tests,
ruby, ObjC)
• static analysis
• unit tests (ruby and ObjC)
• acceptance tests
• custom app icon
• deploy to HockeyApp
• …