First of all, today GitLab Community Edition can fully interact with Jenkins. No questions.
I will provide some feedback on the successful experience of combining Jenkins and GitLab CI below. I will also discuss whether you should use both or just one of them, and for what reason.
I hope this gives you quality information about your own projects.
GitLab CI and Jenkins Strengths
Gitlab ci
GitLab CI is naturally integrated into GitLab SCM. You can create pipelines with gitlab-ci.yml files and manipulate them through a graphical interface.
These pipelines in the form of code, obviously, can be stored in the code base, which ensures the observance of the โall as codeโ practice (access, version control, reproducibility, the possibility of reuse, etc.)
GitLab CI is a great visual management tool:
- All team members (including non-technical) have quick and easy access to application life cycle status.
- therefore, it can be used as an interactive and operational release control panel.
Jenkins
Jenkins is a great build tool. This is the power in many plugins. I was especially lucky to use front-end plugins between Jenkins and other CI or CD tools. This is always a better option than redoing (possibly badly) the dialog interface between the two components.
Pipeline-like code is also available using groovy scripts.
Sharing GitLab CI and Jenkins
At first, this may seem a little redundant, but combining GitLab CI and Jenkins is pretty powerful.
- GitLab CI manages pipelines (chains, starts, controls ...), and you can use its graphical interface integrated into GitLab
- Jenkins manages work and facilitates dialogue with third-party tools.
Another advantage of this design is the weak connection between the tools:
- we could replace any of the components of the assembly factory without the need to rework the entire CI / CD process
- we can have a heterogeneous build environment that combines (possibly several) Jenkins, TeamCity, as you call it, and yet have a single monitoring tool.
Compromise
Well, of course, you have to pay for this design: the initial setup is cumbersome, and you need to have a minimum level of understanding of many tools.
For this reason, I do not recommend this setting if
- You have many third-party tools to work with. This is when Jenkins comes in handy with its many plugins.
- you have to deal with complex applications with heterogeneous technologies, each of which has its own build environment, while still having to have a unified application lifecycle management interface.
If you are not in either of these situations, you are probably better off using only one of the two, but not both.
If I had to choose one
Both GitLab CI and Jenkins have their pros and cons. Both are powerful tools. So which one to choose?
Answer 1
Choose one in which your team (or someone from your loved ones) already has some experience.
Answer 2
If you are all new to KI technology, just pick one and get started.
- If you use GitLab and understand everything, as in the code, it makes sense to choose GitLab CI.
- If you need to have a dialogue with many other CI / CD tools or you need a graphical interface to create your work, choose Jenkins.
Those of you who use GitLab and are not sure that they will continue to do this, should still remember that choosing GitLab CI will mean destroying all your CI / CD pipelines.
And the last word: the balance is a little inclined towards Jenkins because of the many plugins, but there is a chance that GitLab CI will quickly fill this gap.