Search code examples
gitjenkinsgitlabgitlab-cidrone.io

GitLab CI vs. Jenkins


What is the difference between Jenkins and other CI like GitLab CI, drone.io coming with the Git distribution. On some research I could only come up that GitLab community edition doesn't allow Jenkins to be added, but GitLab enterprise edition does. Are there any other significant differences?


Solution

  • This is my experience:

    At my work we manage our repositories with GitLab EE and we have a Jenkins server (1.6) running.

    In the basis they do pretty much the same. They will run some scripts on a server/Docker image.

    TL;DR;

    • Jenkins is easier to use/learn, but it has the risk to become a plugin hell
    • Jenkins has a GUI (this can be preferred if it has to be accessible/maintainable by other people)
    • Integration with GitLab is less than with GitLab CI
    • Jenkins can be split off your repository

    Most CI servers are pretty straight forward (concourse.ci, gitlab-ci, circle-ci, travis-ci, drone.io, gocd and what else have you). They allow you to execute shell/bat scripts from a YAML file definition. Jenkins is much more pluggable, and comes with a UI. This can be either an advantage or disadvantage, depending on your needs.

    Jenkins is very configurable because of all the plugins that are available. The downside of this is that your CI server can become a spaghetti of plugins.

    In my opinion chaining and orchestrating of jobs in Jenkins is much simpler (because of the UI) than via YAML (calling curl commands). Besides that Jenkins supports plugins that will install certain binaries when they are not available on your server (don't know about that for the others).

    Nowadays (Jenkins 2 also supports more "proper ci" with the Jenkinsfile and the pipline plugin which comes default as from Jenkins 2), but used to be less coupled to the repository than i.e. GitLab CI.

    Using YAML files to define your build pipeline (and in the end running pure shell/bat) is cleaner.

    The plug-ins available for Jenkins allow you to visualize all kinds of reporting, such as test results, coverage and other static analyzers. Of course, you can always write or use a tool to do this for you, but it is definitely a plus for Jenkins (especially for managers who tend to value these reports too much).

    Lately I have been working more and more with GitLab CI. At GitLab they are doing a really great job making the whole experience fun. I understand that people use Jenkins, but when you have GitLab running and available it is really easy to get started with GitLab CI. There won't be anything that will integrate as seamlessly as GitLab CI, even though they put quite some effort in third-party integrations.

    • Their documentation should get you started in no time.
    • The threshold to get started is very low.
    • Maintenance is easy (no plugins).
    • Scaling runners is simple.
    • CI fully part of your repository.
    • Jenkins jobs/views can get messy.

    Some perks at the time of writing:

    • Only support for a single file in the community edition. Multiples files in the enterprise edition.