Supercharge Your Jenkins Workflow with Mergify
In the modern software development landscape, continuous integration (CI) and continuous deployment (CD) are no longer just trendy buzzwords. They are vital components of the development cycle. Two tools that are often associated with these operations are Jenkins and Mergify. Jenkins, an open-source automation server, is used to automate parts of the development process, including building, testing, and deploying applications. Mergify, on the other hand, is a powerful GitHub automation tool and merge queue that can simplify the management of pull requests.
Before we dive into the wonders of the Mergify-Jenkins tandem, let’s quickly walk through setting things up.
To get started with Jenkins, you need to install it on your server, and then you can use its rich set of plugins to define your build, test, and deployment pipelines.
Mergify, on the other hand, requires no installation. You integrate it with your GitHub account, and then you define your automation rules in a YAML file that lives in your repository.
Jenkins and Mergify are powerful tools individually, but when combined, they can take your DevOps workflows to the next level. The robust build and test automation provided by Jenkins are the perfect complement to Mergify’s ability to automate GitHub workflows, such as labeling, merging, backporting, and more.
By integrating Jenkins and Mergify, you’re essentially creating a powerful CI/CD pipeline. You’re able to automatically build, test, and deploy your software while also managing the various GitHub workflows in an efficient and streamlined manner.
One particularly powerful combination of Jenkins and Mergify is in the area of pull request updates. Normally, if a Jenkins build fails due to a commit, someone has to notify the developer to update their pull request manually.
With Mergify, this process can be completely automated. Using Mergify’s pull request rules, you can configure a rule that will automatically request changes and comment on the pull request if the Jenkins build fails. This not only saves time but also ensures that issues are immediately flagged and addressed.
Firstly, you need to ensure that Jenkins is reporting the build status back to GitHub. This can be done using the GitHub plugin in Jenkins. After installing the plugin, go to the configuration of the job that you want to link with GitHub and find the "Post-build Actions" section. There, add "Set GitHub commit status (universal)" and configure it to update the status of the commit in GitHub based on the build result.
Next, in your GitHub repository, you need to create a
.mergify.yml file where you’ll define your automation rules.
Here’s an example of a rule that comments on and labels a pull request if the Jenkins build fails:
pull_request_rules: - name: comment on PR if build fails conditions: # Replace with the actual name of your Jenkins reported check - check-failure=Jenkins actions: comment: message: "The Jenkins build has failed. Please review your changes." label: toggle: - build-failed
In this configuration:
conditionssection checks if the Jenkins build is unsuccessful.
actionssection defines what actions Mergify should take if the conditions are met. In this case, it will add a comment to the pull request and apply the label
If you wanted to also update the pull request with the latest change from its base branch to see if that’d make it work, you could use the
update action from Mergify also:
pull_request_rules: - name: comment and update on PR if build fails conditions: # Replace with the actual name of your Jenkins reported check - check-failure=Jenkins actions: comment: message: "The Jenkins build has failed. Please review your changes." label: toggle: - build-failed # Merge PR base branch into the PR, this will retrigger the CI update:
Another powerful way you can combine Jenkins and Mergify is by using the Merge Queue feature. The merge queue is a strategy offered by Mergify to secure your repository’s main branch state. It ensures that the main branch is always green by validating that each pull request integrates correctly before merging.
With Jenkins as your continuous integration (CI) system, you can ensure each pull request is thoroughly checked before it gets added to the merge queue. Here’s how you can configure this:
As the first step, ensure your Jenkins setup is correctly reporting the build status to GitHub, as explained previously. Each pull request should trigger a Jenkins job, which subsequently updates the pull request status based on the build result.
Next, in your
.mergify.yml file, you can set up a rule that places the pull request in a merge queue once it’s approved and all CI checks, including Jenkins, pass. Below is an example configuration:
queue_rules: - name: default merge_conditions: - "#approved-reviews-by>=1" - check-success=Jenkins routing_conditions: - "#approved-reviews-by>=1" - check-success=Jenkins
In this configuration:
queue_rulessection sets up a merge queue named
A pull request is added to this queue when it has at least one approval (
#approved-reviews-by>=1) and the Jenkins check is successful (
check-success=Jenkins) — this is what the
The pull request is merged once it’s updated and still has Jenkins checks passing, plus the required approval.
Once you have updated the
.mergify.yml file with the above rules, commit and push the file to your repository.
With this setup, each pull request must pass the Jenkins build and get approval before Mergify adds it to the merge queue. Only when the pull request at the front of the queue passes all checks, it gets merged, ensuring the main branch’s integrity.
By coupling Jenkins' robust CI functionality with Mergify’s merge queue, you can make your development workflow much more efficient and error-proof, saving your team time and reducing the risk of breaking your main branch.
With Jenkins handling the building, testing, and deploying of your software and Mergify managing your GitHub workflows, you have a truly powerful and streamlined CI/CD pipeline. This combination allows you to automate your workflows, improve efficiency, and ultimately deliver better software.
By embracing tools like Jenkins and Mergify, you’re not just keeping up with modern DevOps practices; you’re also investing in the long-term productivity and success of your software development projects.
So, are you ready to supercharge your Jenkins workflow with Mergify? Try for free