Más contenido relacionado La actualidad más candente (7) Similar a 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
• …