Continuous integration is important for making developers productive and for providing a consistent building, testing and deployment environment for the development team. However, it’s very difficult for a user to choose the right CI/CD solution for their project. In this article, we will be comparing Codemagic with a popular continuous integration service, Jenkins, from the perspective of a mobile app developer. Let’s find out if Codemagic could be a good alternative to Jenkins.
This article is written by mobile app developer Souvik Biswas
Jenkins is an open-source continuous integration tool written in Java. It provides good flexibility for choosing tools and has a thriving plugin library. But if you are focused on a particular domain (for example, mobile apps), then Jenkins might not be a suitable option for you. We will discuss more about that in this article.
Codemagic, on the other hand, is a continuous integration and delivery service focused on mobile apps. It has support for most of the popular frameworks, like Android, iOS, Flutter, React Native, Cordova and Ionic.
In this post, we will compare each of them using eight criteria:
- Setup
- Running a build
- Code signing
- Deploying artifacts
- Maintaining infrastructure
- Notification integration
- Team collaboration
- Community support
Now that we have defined all our criteria, let’s start exploring each of them in detail and find out if Codemagic is a great alternative to Jenkins, specially to mobile app developers.
Jenkins vs Codemagic: Setup
Let’s start by discussing and comparing the setup process of both of these services.
Jenkins: Setup
Jenkins is a self-hosted continuous integration tool, so in order to get started, you will first need to download it on your system.
In my case, it can be downloaded on macOS using the brew package manager:
brew install jenkins-lts
Run it as a local server:
brew services start jenkins-lts
After running it on your system, you can access it by going to http://localhost:8080
.
If you are running for the first time, you have to provide the Administrator password.
Next, you will be presented with options to customize Jenkins.
If you go with the option “Select plugins to install”, then you will see this page for choosing the plugins:
Wait until the installation of the plugins completes.
You will then be asked to create an Admin User.
You can configure or change your Jenkins URL from this page.
After you complete the initial setup, you will see the Jenkins homepage.
Codemagic: Setup
Codemagic is a cloud-based CI/CD service, so you don’t have to install any additional tools on your own system. The setup for Codemagic is pretty straightforward.
Go to Codemagic’s sign up page. You can use any cloud-based Git repository (GitHub, Bitbucket, GitLab) to connect and sign up on Codemagic.
Codemagic automatically imports all the projects present on your repository to give you easy build access to them. You will be taken to the dashboard after connecting to the repository.
You may have noticed that Codemagic’s initial setup is pretty fast and user friendly. If you are looking for Jenkins alternative then Codemagic definitely takes the point when it comes to the ease of a signup.
Jenkins vs Codemagic: Running build
The prerequisite for running a build on either of the services is that the project should be already committed to a cloud repository (such as GitHub).
Jenkins: Running a build
To start a build on Jenkins, you have to create a new job. As an example, we will be building and testing a Flutter project, which is present on my GitHub account.
First of all, you have to configure some global environment variables.
Select Manage Jenkins from the left menu.
Choose Configure System.
Add some global environment variables with the path of the tools that you will need for building and testing your project on Jenkins. Click on Save.
Now, you have to configure a new job on Jenkins for your project.
-
Click on Create a job from the homepage.
-
Enter a name and select Freestyle project. Click on OK.
-
Go to the Source Code Management tab, select Git and add your GitHub account credentials there.
-
Scroll down to the Build section, click on Add build step and select Execute shell.
-
Now, define a very simple build script for an Android debug build of a Flutter project:
You can navigate to the Console Output section from the left menu to see the progress.
When the build completes, you will see this on your Dashboard:
Codemagic: Running a build
Running builds on Codemagic is much simpler, as it provides a much better UI, and you do not need to connect to your Git repository manually. As you have seen during the setup, Codemagic has already connected to the Git repository.
-
To configure a project for building, search for your project on the Applications dashboard. Click on Set up build.
-
Select Flutter App as the workflow.
-
You can configure your build pipeline from this page. Then, just click on Start your first build.
-
If you have multiple workflows for a project, you can choose which one you want to build. Then click on Start new build.
This will start the build on Codemagic. Wait for it to complete.
You can also see your previous and currently running builds on the Builds overview page:
To build using any other app workflow (Android, React Native, etc.), you have to use the codemagic.yaml file.
Codemagic is the first CI/CD provider to make Apple M1 Mac mini available for developers. Sign up here to get notified before the public release.
Jenkins vs Codemagic: Code signing
Code signing is an important stage of a mobile app development workflow that is required if you want to release your app to the public by publishing it to Google Play Store or Apple App Store.
Jenkins: Code signing
There are Jenkins plugins available for code signing your build artifacts for both the Android and iOS platforms.
To code sign your Android builds, you can use the Android Signing plugin, and for iOS builds, you can use the Xcode plugin.
Codemagic: Code signing
Codemagic provides a developer-friendly code-signing process that can be configured from the project settings UI or by using the codemagic.yaml
file.
Codemagic also provides integration with the Apple Developer Portal for even easier iOS code signing.
For more information, check out the code-signing docs for Android and iOS.
Jenkins vs Codemagic: Deploying artifacts
Deploying build artifacts to Google Play Store or Apple App Store is a cumbersome process, so using a continuous integration service to manage and handle this process is recommended.
Jenkins: Deploying artifacts
Jenkins plugins are available for deploying your build artifacts. Android artifacts can be deployed to Google Play Store using the plugin Google Play Android Publisher. For iOS artifacts, the same Xcode plugin that can be used for code signing can also be used for deploying to Apple App Store.
You can also use third-party services, like App Center, to publish your build artifacts. The App Center plugin is available for Jenkins.
Codemagic: Deploying artifacts
On your project settings page, you can scroll down to the Publish section, where you will find options to publish your artifacts using different services. Codemagic has support for directly publishing to Google Play Store and App Store Connect.
For more information on publishing your build artifacts, check out the documentation.
Jenkins vs Codemagic: Maintaining infrastructure
Infrastructural management cost is an important decision-making factor to consider while you are choosing a continuous integration service.
Jenkins: Maintaining infrastructure
All Jenkins builds run on self-hosted servers, which adds the overhead of having to manage users on your own infrastructure and keeping all the development tools updated. It can be integrated with third-party cloud-based servers where the tools can be maintained, but this requires additional configuration, which might be intimidating for someone who is just getting started with CI for their project and might require a DevOps person to be on the team.
Codemagic: Maintaining infrastructure
The builds on Codemagic run on their cloud-based servers, which are completely managed by the experienced Codemagic team. This helps in keeping all the build tools updated so that users can focus on their app development process without having any infrastructural management overhead. Codemagic build systems are pre-installed with all the tools required for a common mobile app development workflow.
Jenkins vs Codemagic: Notification integration
Notifications are necessary to keep your team updated on the build status while they focus on the development of the app.
Jenkins: Notification integration
Jenkins provides a number of plugins for enabling build notifications through email, Slack, Telegram, and many other platforms. But all of them require additional configuration to enable them for a project.
Codemagic: Notification integration
Email notifications on the build status and the generated artifacts are enabled by default on Codemagic. Apart from that, Codemagic provides integration with various third-party services, like Slack, MS Teams, and many others.
Learn more about the steps for enabling them here.
Jenkins vs Codemagic: Team collaboration
Any continuous integration and deployment workflow can be made more successful with a proper team collaboration setup, as critical bugs get attention and are fixed faster.
Jenkins: Team collaboration
Jenkins doesn’t provide any tools for building a good team collaboration in a workflow. It has to be organized and managed by the development team.
Codemagic: Team collaboration
In Codemagic, you can have a Team account, which makes it easy to maintain a good development workflow when more than one developer is working on a project.
On top of that, Codemagic provides a nice feature called public dashboards that makes it possible for teams to share the list of builds, release notes and build artifacts with people outside Codemagic using a public link.
Jenkins vs Codemagic: Community support
Another aspect to take into consideration before choosing a continuous integration service is the community support and the quality of the documentation built around the service.
Jenkins: Community support
Jenkins, being one of the oldest and most popular continuous integration services, has a huge community base. They help in keeping the documentation updated and maintaining its enormous number of plugins to keep them functional.
Codemagic: Community support
Codemagic provides awesome community support through their Slack Workspace, which is accessible to the public. Here, developers can ask about any issue they face while using Codemagic and can even suggest feature improvements directly to the Codemagic team.
Codemagic has very detailed open-source documentation. As it is open source, anyone from the community can suggest any improvement to it or can contribute by sending a pull request to the GitHub repository.
Codemagic also maintains a blog, which not only has articles related to its CI service but also about various features and implementations of the frameworks, their testing support and many other topics.
Join the Codemagic Slack workspace here.
Jenkins vs Codemagic: Conclusion
Choosing and building a proper continuous integration and delivery workflow for the team might be difficult, but this article should have simplified it a bit so that you can choose a CI/CD solution best suited for your workflow.
Jenkins is open-sourced and free of cost as it is a self-hosted service, but this increases the overhead of maintaining the infrastructure and keeping the entire set of tools updated. There is an enormous range of plugins available for integrating various tools and services with the workflow.
Codemagic is a cloud-based solution (no overhead of maintaining any infrastructure) with pre-installed tools suited for a mobile app development workflow. In addition, it provides easy code-signing and deployment of apps to major services. It also allows numerous third-party integrations that help you to make the workflow more productive with the tools that you love.
In a nutshell, if you are setting up a CI/CD workflow focused on mobile apps, then Codemagic (having support for all major app development frameworks and tools) should be a better choice over Jenkins. On the other hand, if you want better flexibility and your workflow consists of testing other backend frameworks as well (in addition to app development), then Jenkins might be a better choice for you.
References
Souvik Biswas is a passionate Mobile App Developer (Android and Flutter). He has worked on a number of mobile apps throughout his journey, and he loves open source contribution on GitHub. He is currently pursuing a B.Tech degree in Computer Science and Engineering from Indian Institute of Information Technology Kalyani. He also writes Flutter articles on Medium - Flutter Community.