18 minute read The mobile space has changed quickly, even within the past few years. At Shopify, the world’s largest Rails application, we have seen the growth and potential of the mobile market and set a goal of becoming a mobile-first company. Today, over 130,000 merchants are using Shopify Mobile to set up and run their stores from their smartphones. Through the inherent simplicity and flexibility of the mobile platform, many mobile-focused products have found success. This post was co-written with Arham Ahmed, and shout-outs to Sean Corcoran of MacStadium and Tim Lucas of Buildkite.
Overview
This article discusses the development of a dynamic mobile Continuous Integration (CI) system at Shopify, highlighting the transition from a static setup to a scalable, efficient architecture. It covers the challenges faced, the technologies used, and the improvements achieved in build times and deployment processes.
What You'll Learn
How to build a scalable mobile CI system using Buildkite
Why using linked clones can optimize VM deployment times
How to implement caching strategies for faster builds
When to use virtual machines for isolated build environments
Prerequisites & Requirements
- Understanding of CI/CD concepts and practices
- Familiarity with Buildkite and VMware technologies(optional)
Key Questions Answered
What improvements were made to Shopify's mobile CI system?
How does Shopify handle iOS app builds in CI?
What role does caching play in the new CI system?
Why did Shopify choose Buildkite over other CI services?
Key Statistics & Figures
Technologies & Tools
Some links below are affiliate links. We may earn a commission if you make a purchase.
Key Actionable Insights
1Invest in high-performance hardware for CI systems to improve deployment times.Using a shared SAN for VM templates significantly reduced deployment times from hours to minutes, enabling horizontal scalability and efficient resource management.
2Utilize linked clones in your virtual machine setup to optimize storage and speed.Linked clones allow for faster creation of VMs and use less disk space, which is essential for maintaining performance in a CI environment.
3Implement a caching layer to maintain build speed across disposable worker VMs.By caching dependencies and using RAM disks, you can significantly reduce I/O load and improve the performance of your CI pipeline.