CI/CD for mobile apps at Cookpad ● Unit Testing on each PR ● Daily UI Testing (Cookpad App) ● Building apps for In-house delivery ● Building apps for release and auto submission ● Support release flow tasks
Testing ● Unit Testing ○ The number of tests depends on the project ○ There are about 1,100 test cases in ios-cookpad ● UI Testing ○ Testing for Cookpad app with Appium, EarlGrey ○ Consuming much time (9+ hours!) ○ There are about 180 scenarios in ios-cookpad
In-house app delivery ● Upload app binary to in-house delivery service ○ Private delivery system “Haneda” (iOS/Android) ■ Internal network or G Suite authentication required ○ Google Play Store internal test track (Android) ● Delivery target ○ master branch ○ some PRs (labeled “InHouseBuild” on GHE PR)
Auto submission ● Scheduled submission with CI machines on every week (Cookpad app) ○ Start submission process automatically at 2:00 a.m. on Fridays ● Start submission process via Slack (Other apps)
Support release flow tasks ● Create Issue for release check ● Start next milestone ○ Bump up version ○ Reset release notes ○ Create milestone ● Remind about stale issues
Certificates management with fastlane match ● Manage certificates/provisioning profiles in GHE repository ● Each CI machines retrieve and decrypt certificates ● Developers do not need to install certificates to their machines iOSアプリのサブミット自動化と証明書管理の効率化 - クックパッド開発者ブログ : https://techlife.cookpad.com/entry/2018/05/17/113000 Developer
Facing problems ● Job queue congestion, long time waiting ○ Peak time is early evening in Japan ■ Global team members start working ○ Increasing mobile app projects ● CI machines scaling is hard ○ Specially, mac for iOS apps (shortage of set up automation, physical machines) ● Make self-service as much as possible on project ○ Project member ops faster than wait for mobile-infra team ops ○ Make a project team select technical means (includes CI services)
Our hope to cloud CI services ● Easy CI stacks scaling ○ Good provisioning tools support ○ Flexible CI Stacks Scaling (e.g. considered peak time, number of jobs, etc...) ● Wide choice development environment support ○ Xcode/Android SDK versions, React Native etc… ● Easy set up build steps, management, reusability ● Early follow to dev tools updates