Latest TechRepublic post revealed that as per the Stack Overflow Developer Survey 2018, DevOps Specialist is a highest paid programming job in the IT industry at the moment. There is no shortcut to becoming a DevOps Specialist, it comes out of hard work, continuous learning and years of experience. As DevOps engineers roles require knowledge of millions of tools and technologies, it also requires soft skills to deal with different teams. The typical DevOps Engineers toolbox includes Jenkins, Docker, Ansible, Chef, Puppet, AWS, Azure, Terraform, Kubernetes and many more. It turns out most of the DevOps engineers are very good at implementing these tools in the organisations to deploy the web applications. However, when it comes Mobile application these toolkit doesn’t always work especially for the Apple platform apps. In this post, we will see what skills traditional DevOps engineers lacking to become full stack DevOps engineer and how Mobile DevOps is becoming key things in the recent days.
How Mobile DevOps is Different
Managing an infrastructure for web and mobile are the completely separate activities. There are some unique challenges when it comes to managing Mobile infrastructure. These challenges are a platform and operating system specific. The most of the web is currently running on Linux, however, building iOS apps require infrastructure to manage macOS servers. We will see what are the major differences with web and mobile DevOps
Operating Systems
DevOps engineers mostly use Linux as the primary operating system, some of them still uses Windows servers. It’s very important to understand on which platform the production is supposed to run. In the case of the websites, most production code runs in the browsers while in case of the mobile apps, it runs on the real devices e.g Android, iOS etc
Hosting Servers
The websites need to be hosted on the servers running inside the data centre or in the cloud. Most of the companies moving their infrastructure to the cloud so that DevOps engineers use AWS, Azure or some other cloud platforms. They also need to monitor all the servers to make sure website is running without issues. Mobile applications are hosted on AppStore or Play Store once they have been released mobile apps don’t need to monitor for hosting as AppStore or PlayStore will take care of hosting.
Deployments
Web deployments are push type where we can push the code change to the productions and users have to accept all the deployed changes. The mobile deployments are of pull type where we have to submit an app to App Store for review and then Apple or Google with review an app before it goes to the end users. Once released. mobile apps need to be explicitly updated by the users. This is the major difference that needs to be considered while considering the mobile DevOps.
Tools & Technologies
The technologies used in the web and mobile application development are very different. Websites can be built by various web technologies like Java, Ruby, JavaScripts while native mobiles apps are built using languages like Swift or Kotlin. There are some hybrid apps build using languages like JavaScript but there is the major difference between the technologies used in the web and mobile. The tools used for build, test and release automation are also differing in web and mobile ecosystem. The web ecosystem uses different language-specific build tools while mobile ecosystem uses Fastlane, Gradle etc for build automation. There are some major differences in the testing tools as well. The tools like Selenium or Web drivers are being used in the web while tools like XCTest, Expresso, Appium are being used in the mobile ecosystem.
Code Signing
Mobile applications need to be code signed before shipping to the App Store while web applications don’t need to be code signed. The process of code signing makes sure that application built by the trusted developer and gives the user confidence to use them without any worry.
Now that, we have seen some of the major difference between web and mobile DevOps. Now, let’s explore what are the common mistakes DevOps Engineers makes when they are asked to manage mobile infrastructure.
Reasons DevOps Engineers Suck at Mobile
In the most of the companies, I have seen that DevOps for mobiles apps has been completely outsourced for the Cloud-based CI services like TravisCI, CircleCI or similar. The cloud-based CI services are very expensive and they charge companies on the basis of the number of builds, the number of projects, number of concurrent builds etc. Most of the in-house DevOps teams who are doing amazing things for Linux often refuse to manage to mobile CI/CD in-house because they can’t simply do it. The DevOps engineers great at Jenkins, AWS, Docker, Kubernetes, Ansible etc doesn’t always possess those skills to manage mobile infrastructure. The most common reasons for this is, the tools and skills required for mobile infrastructure is different than web or Linux. When DevOps engineers asked to manage the mobile ecosystem, they truly sucks. Below are some of the common mistakes DevOps engineers often do.
Apply Jenkins Everywhere
In the traditional DevOps, Jenkins is de facto standard for the Continuous Integration and Delivery for web apps. There might be so many Jenkins servers hosted on the AWS or some Other Cloud within Docker containers. Although Jenkins is a great CI/CD server for the web apps, it doesn’t always fit into the mobile workflow. DevOps engineers typically setup Jenkins for running mobile builds. In the iOS apps, Jenkins needs to be installed on the macOS server which kind of pain for the DevOps engineers. Once setup, Jenkins for mobile CI/CD goes through constant hassles and repairs which cause the distraction for the native app developers. The DevOps engineers should go beyond the boundary and sees what are the suitable CI/CD tools for the mobile DevOps.
Lack of Platform Specific Knowlege
DevOps Engineers are great at Linux platform, they can configure, provision and manage all the infrastructure on Linux. However, when it comes to other platforms like macOS, they don’t possess the skills to configure, provision and manage macOS infrastructures. There are the completely different set of tools to that are being used on macOS than Linux e.g Homebrew, security and many more command line Apple developer tools.
Not aware of Mobile Tooling
As mentioned earlier, the set of tools used for the mobile build, test and release automation are way different than the web tooling. The tools used for the beta testing of the mobile apps are also different. The good example of these tools is, Fastlane, CocoaPods, Carthage, Homebrew, Fabric, XCTest, Expresso, Xcode command line tools and many more Apple developer tools. DevOps Engineers working on the Linux platforms might not be heard about these tools.
Choosing Wrong Tools
Due to lack of awareness of the mobile tooling, DevOps Engineers ends up applying tools that they already know on mobile ecosystem. This adds complexity and overhead of maintaining the mobile infrastructure. DevOps Engineers might end up automating Swift build using tools like Maven or Rake which doesn’t make sense for the mobile ecosystem.
Code Signing Ignorance
DevOps Engineers often involved in the deploying the web apps which doesn’t always require code signing. When it comes to the Apple platform, the code needs to signed with authorised certificate and profiles. Code signing of the Apple platform apps requires a developer account with Apple, certificates, provisioning profiles and entitlements. There are separate tools required for the provision and automate code signing tasks.
Conclusion
Managing Mobile infrastructure in-house requires skills, guts and courage. If DevOps team can’t manage the mobile ecosystem and still using highly expensive cloud-based solutions, what’s the point? How does DevOps team in your company manage mobile CI/CD? Is that really working well? Look forward to hearing your experiences. Please waive in the comments below.