Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Etsy Journey to Continuous Integration for Mobi...

Avatar for Nassim Kammah Nassim Kammah
September 15, 2014

Etsy Journey to Continuous Integration for Mobile Apps

Slides presented during Velocity NY 2014.

While traditional websites can leverage their continuous delivery infrastructure to quickly identify and fix bugs, releasing mobile apps requires a 3rd party approval. Major bugs and security vulnerabilities call for emergency releases, which still require the app store approval and can mean days of poor user experience, developer frustration, and a negative impact to the app ratings and reviews.

A comprehensive suite of automated functional tests can greatly help detect defects early across the broad spectrum of devices and configurations. The challenge then becomes setting up a reliable, scalable, and sustainable infrastructure to automatically build and test your app on simulators and devices, as soon as a developer pushes new code.

Today, we want to share with the audience Etsy’s journey to setting up our Continuous Integration infrastructure for our mobile apps teams.

Avatar for Nassim Kammah

Nassim Kammah

September 15, 2014
Tweet

More Decks by Nassim Kammah

Other Decks in Programming

Transcript

  1. 2010 2011 2012 2013 2014 50 web deploys per day

    0 100 Tuesday, September 16, 14
  2. iOS Average App Review Time 09 / 14 6 days

    bit.ly/ios-review-trend Tuesday, September 16, 14
  3. “If the code is not out there, it’s not teaching

    you anything” Tuesday, September 16, 14
  4. Culture reviews try CI cluster Tests Apps Rotations Feature flags

    Bug Hunt automated build Tuesday, September 16, 14
  5. build package for Test Flight package for App Store spot

    check with Test Flight submit Application Loader Tuesday, September 16, 14
  6. We use Jenkins (not Xcode bots) Provisioning profiles in repo

    Build all targets Groovy post build plugin Tuesday, September 16, 14
  7. Every commit should build the mainline on an integration machine

    bit.ly/mfowler-ci Tuesday, September 16, 14
  8. 25 mac mini Opscode Chef provisioning Homebrew + rbenv clicking

    required for initial Xcode install Tuesday, September 16, 14
  9. if ([ [EtsyConfig config] reskinEnabled ] ) { self.window.rootViewController =

    fancyController; } else { self.window.rootViewController = boringController; } Tuesday, September 16, 14
  10. Build Lint Unit Functional 1 - review script 2 -

    Github pull request builder 3 - Build Flow + Groovy console 1 2 3 Tuesday, September 16, 14
  11. Build Lint Unit Functional 1 - bit.ly/trylib 2 - Build

    Flow + Groovy console 2 git diff origin/master 1 Tuesday, September 16, 14
  12. 6 developers 1 computer / 1 projector 3 minutes to

    code then rotate simple testing objective Share / Learn / Have Fun Tuesday, September 16, 14
  13. 300 devices in the pool 4 dedicated iOS 4 dedicated

    android bit.ly/app-thwack Tuesday, September 16, 14
  14. 8 volunteers in a room QA facilitator Mix of devices

    find bugs + + Tuesday, September 16, 14
  15. Package your app without Xcode Organize a test dojo Write

    a functional test Build reviews automatically Tuesday, September 16, 14