What Are The Advantages?

Scalable as tests run distributed on separate machines of which you can add as many as you want

Faster results because each build can be split in multiple jobs that run in parallel on multiple machines

Free and open source as all CI code is MIT Expat licensed

Features

Multi-platform since you can executes builds on Unix, Windows and OSX.

Multi-language because builds scripts are command line driven and work with Java, PHP, Ruby, C and any other language.

Stable because the GitLab CI is on a different machine that the ones that perform builds.

Parallel builds by splitting a build over multiple machines so it executes quickly.

Realtime logging a link in the merge request takes you to the current build log that updates dynamically.

Continuous Delivery (CD) and deployment are easy with multiple types of jobs, environmental variables and the dpl gem.

Fully integrated with GitLab

Fully integrated with GitLab.

Single sign-on you can use the same login and password as on your GitLab instance.

Quick project setup since you can add them with a single click, all hooks are setup automatically via the GitLab API.

Merge request integration see the status of each build within the Merge Request in GitLab.

Architecture

GitLab CI is a web application with an API that stores its state in a database. It manages projects/builds and provides a nice user interface. It uses the GitLab application API to authenticate its users.

GitLab Runner is an application which processes builds. It can be deployed separately and works with GitLab CI through an API.

In order to run tests, you need at least 1 GitLab CI instance and 1 GitLab Runner.
One runner can run one or more jobs at the same time.
Each project in GitLab CI can have one or multiple jobs.
All the jobs for one commit run in parallel so your tests results are available sooner.
These jobs can run in parallel on the same runner and/or on different runners.
Runners and jobs can be labeled so that jobs run on runners that can process them (the right machine, OS and configuration).
We recommend to not install runners the same instance as GitLab CI so that running rogue code and jobs can't affect the security of GitLab CI itself.
GitLab CI can be run on the same instance as GitLab or on a separate instance.