2015-08-25 21:42:46 -04:00
|
|
|
# Runners
|
|
|
|
|
|
|
|
In GitLab CI, Runners run your [yaml](../yaml/README.md).
|
2017-02-13 11:59:57 -05:00
|
|
|
A Runner is an isolated (virtual) machine that picks up jobs
|
2015-08-25 21:42:46 -04:00
|
|
|
through the coordinator API of GitLab CI.
|
|
|
|
|
2017-02-13 11:59:57 -05:00
|
|
|
A Runner can be specific to a certain project or serve any project
|
|
|
|
in GitLab CI. A Runner that serves all projects is called a shared Runner.
|
2015-08-25 21:42:46 -04:00
|
|
|
|
2016-04-11 05:41:27 -04:00
|
|
|
Ideally, GitLab Runner should not be installed on the same machine as GitLab.
|
2017-02-15 13:27:40 -05:00
|
|
|
Read the [requirements documentation](../../install/requirements.md#gitlab-runner)
|
2016-04-11 05:41:27 -04:00
|
|
|
for more information.
|
|
|
|
|
2015-08-25 21:42:46 -04:00
|
|
|
## Shared vs. Specific Runners
|
|
|
|
|
2017-02-13 11:59:57 -05:00
|
|
|
A Runner that is specific only runs for the specified project. A shared Runner
|
2017-02-15 13:27:40 -05:00
|
|
|
can run jobs for every project that has enabled the option **Allow shared Runners**.
|
2015-08-25 21:42:46 -04:00
|
|
|
|
2017-02-13 11:59:57 -05:00
|
|
|
**Shared Runners** are useful for jobs that have similar requirements,
|
|
|
|
between multiple projects. Rather than having multiple Runners idling for
|
|
|
|
many projects, you can have a single or a small number of Runners that handle
|
|
|
|
multiple projects. This makes it easier to maintain and update Runners.
|
2015-08-25 21:42:46 -04:00
|
|
|
|
2017-02-13 11:59:57 -05:00
|
|
|
**Specific Runners** are useful for jobs that have special requirements or for
|
2016-04-14 12:04:18 -04:00
|
|
|
projects with a specific demand. If a job has certain requirements, you can set
|
2017-02-13 11:59:57 -05:00
|
|
|
up the specific Runner with this in mind, while not having to do this for all
|
|
|
|
Runners. For example, if you want to deploy a certain project, you can setup
|
|
|
|
a specific Runner to have the right credentials for this.
|
2015-08-25 21:42:46 -04:00
|
|
|
|
2017-02-13 11:59:57 -05:00
|
|
|
Projects with high demand of CI activity can also benefit from using specific Runners.
|
|
|
|
By having dedicated Runners you are guaranteed that the Runner is not being held
|
2015-08-25 21:42:46 -04:00
|
|
|
up by another project's jobs.
|
|
|
|
|
2017-02-13 11:59:57 -05:00
|
|
|
You can set up a specific Runner to be used by multiple projects. The difference
|
|
|
|
with a shared Runner is that you have to enable each project explicitly for
|
|
|
|
the Runner to be able to run its jobs.
|
2015-08-25 21:42:46 -04:00
|
|
|
|
2017-02-13 11:59:57 -05:00
|
|
|
Specific Runners do not get shared with forked projects automatically.
|
2015-08-25 21:42:46 -04:00
|
|
|
A fork does copy the CI settings (jobs, allow shared, etc) of the cloned repository.
|
|
|
|
|
|
|
|
# Creating and Registering a Runner
|
|
|
|
|
2017-02-13 11:59:57 -05:00
|
|
|
There are several ways to create a Runner. Only after creation, upon
|
2015-08-25 21:42:46 -04:00
|
|
|
registration its status as Shared or Specific is determined.
|
|
|
|
|
2017-02-15 13:27:40 -05:00
|
|
|
[See the documentation for](https://docs.gitlab.com/runner/install)
|
2015-08-25 21:42:46 -04:00
|
|
|
the different methods of installing a Runner instance.
|
|
|
|
|
2017-02-13 11:59:57 -05:00
|
|
|
After installing the Runner, you can either register it as `Shared` or as `Specific`.
|
2015-08-25 21:42:46 -04:00
|
|
|
You can only register a Shared Runner if you have admin access to the GitLab instance.
|
|
|
|
|
|
|
|
## Registering a Shared Runner
|
|
|
|
|
2017-02-13 11:59:57 -05:00
|
|
|
You can only register a shared Runner if you are an admin on the linked
|
2015-08-25 21:42:46 -04:00
|
|
|
GitLab instance.
|
|
|
|
|
2017-02-15 13:27:40 -05:00
|
|
|
Grab the shared-Runner token on the `admin/runners` page of your GitLab CI
|
2015-08-25 21:42:46 -04:00
|
|
|
instance.
|
|
|
|
|
2017-02-15 13:27:40 -05:00
|
|
|
![shared token](shared_runner.png)
|
2015-08-25 21:42:46 -04:00
|
|
|
|
2017-02-13 11:59:57 -05:00
|
|
|
Now simply register the Runner as any Runner:
|
2015-08-25 21:42:46 -04:00
|
|
|
|
|
|
|
```
|
2017-02-15 13:27:40 -05:00
|
|
|
sudo gitlab-ci-multi-runner register
|
2015-08-25 21:42:46 -04:00
|
|
|
```
|
|
|
|
|
2017-02-13 11:59:57 -05:00
|
|
|
Shared Runners are enabled by default as of GitLab 8.2, but can be disabled with the
|
2017-02-15 13:27:40 -05:00
|
|
|
`DISABLE SHARED RUNNERS` button. Previous versions of GitLab defaulted shared Runners to
|
2016-01-09 19:02:34 -05:00
|
|
|
disabled.
|
2015-08-25 21:42:46 -04:00
|
|
|
|
|
|
|
## Registering a Specific Runner
|
|
|
|
|
|
|
|
Registering a specific can be done in two ways:
|
|
|
|
|
2017-02-13 11:59:57 -05:00
|
|
|
1. Creating a Runner with the project registration token
|
|
|
|
1. Converting a shared Runner into a specific Runner (one-way, admin only)
|
2015-08-25 21:42:46 -04:00
|
|
|
|
2017-02-13 11:59:57 -05:00
|
|
|
There are several ways to create a Runner instance. The steps below only
|
|
|
|
concern registering the Runner on GitLab CI.
|
2015-08-25 21:42:46 -04:00
|
|
|
|
|
|
|
### Registering a Specific Runner with a Project Registration token
|
|
|
|
|
2017-02-13 11:59:57 -05:00
|
|
|
To create a specific Runner without having admin rights to the GitLab instance,
|
|
|
|
visit the project you want to make the Runner work for in GitLab CI.
|
2015-08-25 21:42:46 -04:00
|
|
|
|
2017-02-13 11:59:57 -05:00
|
|
|
Click on the Runner tab and use the registration token you find there to
|
|
|
|
setup a specific Runner for this project.
|
2015-08-25 21:42:46 -04:00
|
|
|
|
2017-02-13 11:59:57 -05:00
|
|
|
![project Runners in GitLab CI](project_specific.png)
|
2015-08-25 21:42:46 -04:00
|
|
|
|
2017-02-13 11:59:57 -05:00
|
|
|
To register the Runner, run the command below and follow instructions:
|
2015-08-25 21:42:46 -04:00
|
|
|
|
|
|
|
```
|
2017-02-15 13:27:40 -05:00
|
|
|
sudo gitlab-ci-multi-runner register
|
2015-08-25 21:42:46 -04:00
|
|
|
```
|
|
|
|
|
2017-02-13 11:59:57 -05:00
|
|
|
### Lock a specific Runner from being enabled for other projects
|
2016-06-07 10:48:16 -04:00
|
|
|
|
2017-02-13 11:59:57 -05:00
|
|
|
You can configure a Runner to assign it exclusively to a project. When a
|
|
|
|
Runner is locked this way, it can no longer be enabled for other projects.
|
|
|
|
This setting is available on each Runner in *Project Settings* > *Runners*.
|
2016-06-07 10:48:16 -04:00
|
|
|
|
2015-08-25 21:42:46 -04:00
|
|
|
### Making an existing Shared Runner Specific
|
|
|
|
|
|
|
|
If you are an admin on your GitLab instance,
|
2017-02-13 11:59:57 -05:00
|
|
|
you can make any shared Runner a specific Runner, _but you can not
|
|
|
|
make a specific Runner a shared Runner_.
|
2015-08-25 21:42:46 -04:00
|
|
|
|
2017-02-15 13:27:40 -05:00
|
|
|
To make a shared Runner specific, go to the Runner page (`/admin/runners`)
|
2017-02-13 11:59:57 -05:00
|
|
|
and find your Runner. Add any projects on the left to make this Runner
|
|
|
|
run exclusively for these projects, therefore making it a specific Runner.
|
2015-08-25 21:42:46 -04:00
|
|
|
|
2017-02-13 11:59:57 -05:00
|
|
|
![making a shared Runner specific](shared_to_specific_admin.png)
|
2015-08-25 21:42:46 -04:00
|
|
|
|
|
|
|
## Using Shared Runners Effectively
|
|
|
|
|
2017-02-13 11:59:57 -05:00
|
|
|
If you are planning to use shared Runners, there are several things you
|
2015-08-25 21:42:46 -04:00
|
|
|
should keep in mind.
|
|
|
|
|
|
|
|
### Use Tags
|
|
|
|
|
2017-02-13 11:59:57 -05:00
|
|
|
You must setup a Runner to be able to run all the different types of jobs
|
2015-08-25 21:42:46 -04:00
|
|
|
that it may encounter on the projects it's shared over. This would be
|
|
|
|
problematic for large amounts of projects, if it wasn't for tags.
|
|
|
|
|
|
|
|
By tagging a Runner for the types of jobs it can handle, you can make sure
|
2017-02-13 11:59:57 -05:00
|
|
|
shared Runners will only run the jobs they are equipped to run.
|
2015-08-25 21:42:46 -04:00
|
|
|
|
2017-02-13 11:59:57 -05:00
|
|
|
For instance, at GitLab we have Runners tagged with "rails" if they contain
|
2015-08-25 21:42:46 -04:00
|
|
|
the appropriate dependencies to run Rails test suites.
|
|
|
|
|
2017-02-13 11:59:57 -05:00
|
|
|
### Prevent Runner with tags from picking jobs without tags
|
2016-05-06 06:44:20 -04:00
|
|
|
|
2017-02-13 11:59:57 -05:00
|
|
|
You can configure a Runner to prevent it from picking jobs with tags when
|
|
|
|
the Runner does not have tags assigned. This setting is available on each
|
|
|
|
Runner in *Project Settings* > *Runners*.
|
2016-05-06 06:44:20 -04:00
|
|
|
|
|
|
|
### Be careful with sensitive information
|
2015-08-25 21:42:46 -04:00
|
|
|
|
2017-02-13 11:59:57 -05:00
|
|
|
If you can run a job on a Runner, you can get access to any code it runs
|
|
|
|
and get the token of the Runner. With shared Runners, this means that anyone
|
|
|
|
that runs jobs on the Runner, can access anyone else's code that runs on the Runner.
|
2015-08-25 21:42:46 -04:00
|
|
|
|
2017-02-13 11:59:57 -05:00
|
|
|
In addition, because you can get access to the Runner token, it is possible
|
|
|
|
to create a clone of a Runner and submit false jobs, for example.
|
2015-08-25 21:42:46 -04:00
|
|
|
|
2017-02-13 11:59:57 -05:00
|
|
|
The above is easily avoided by restricting the usage of shared Runners
|
2015-08-25 21:42:46 -04:00
|
|
|
on large public GitLab instances and controlling access to your GitLab instance.
|
|
|
|
|
|
|
|
### Forks
|
|
|
|
|
|
|
|
Whenever a project is forked, it copies the settings of the jobs that relate
|
2017-02-13 11:59:57 -05:00
|
|
|
to it. This means that if you have shared Runners setup for a project and
|
|
|
|
someone forks that project, the shared Runners will also serve jobs of this
|
2015-08-25 21:42:46 -04:00
|
|
|
project.
|
|
|
|
|
2016-04-11 05:41:27 -04:00
|
|
|
## Attack vectors in Runners
|
2015-08-25 21:42:46 -04:00
|
|
|
|
2017-02-13 11:59:57 -05:00
|
|
|
Mentioned briefly earlier, but the following things of Runners can be exploited.
|
|
|
|
We're always looking for contributions that can mitigate these
|
|
|
|
[Security Considerations](https://docs.gitlab.com/runner/security/).
|