Background: I work for the second-largest banking group in France. So when it was time to create their mobile app, we needed a robust CI/CD platform. The challenge was to build the iOS application with XCode from scratch.
Since developers didn't use tools like Sonar -- and sometimes they don't test their code -- we wanted to have a full CI/CD platform. A continuous integration platform that supports all branches from feature to release. We also wanted to incorporate Sonar for quality and Checkmarx for security and deployment.
Goals: Gain time for building and testing mobile applications.
Solution & Results: By setting a multibranch pipeline with Jenkins for iOS, we are able to guarantee a high level of quality. We set out to build a full CI/CD chain using Jenkins.
Jenkins is very useful to launch all necessary steps to build great applications. We mix plugins and shell commands, but shared libraries make it extremely easy to maintain our code. It's a perfect solution to make CI-as-Code.
I've done the same with Android by using Jenkins with Docker images to build on the Linux platform. Also, to gain time for all multiple projects, I've made shared libraries, permitting us the speed we need and the ability to share our code across all the projects.
To build iOS applications, we launch multiple XCode builds and unit tests through the Jenkins' Xcode plugin. Depending on the branch, we deploy the app to the app stores: automating a git tag and so on. Productivity and quality have increased with this process. Developers and project managers gained more time to work on other projects, and we have reduced the delivery chain. With Jenkins shared libraries, we were able to reuse many methods through all of our different projects.
After developing the iOS applications, I had to create a CI/CD platform for Android builds. The goal, however, was different for the Android project. For iOS builds, we had to use physical Mac machines due to Apple's specificities. For Android builds, we've used Linux Jenkins agents with Docker. For each Android build, we use a specific Docker image with all the tools needed to build Android applications (Gradle, Android SDK, and other tools). From there, the Linux Jenkins agent can also be configured to call Java, PHP, or Angular builds. A Docker image was made for each language.
For the Android build, we begin by opening a Docker image, building the app with Gradle, and launching unit tests. Similar to the iOs build, we then launch the quality, security, and deployment steps.
As for key capabilities, first and foremost is the shared libraries function! This is a very powerful tool to share and reuse the code. It's also very useful to separate the code of a specific project from code for continuous integration. If we make code modifications for the pipeline, we don't have to touch the application code repository.
We also used the following Jenkins plugins:
I've written many libraries, and I've been working full-time on Jenkins for two years now. I've learned a lot: Jenkins is a powerful tool to create a full CI/CD toolchain for any project.
As for results: