This role will install the official GitLab Runner (fork from haroldb) with updates. Needed something simple and working, this did the trick for me. Open for changes though.
This role requires Ansible 2.7 or higher.
gitlab_runner_package_name
- Since Gitlab 10.x The package name ofgitlab-ci-multi-runner
has been renamed togitlab-runner
. In order to install a version < 10.x you will need to define this variablegitlab_runner_package_name: gitlab-ci-multi-runner
.gitlab_runner_wanted_version
orgitlab_runner_package_version
- To install a specific version of the gitlab runner (by default it installs the latest). On Mac OSX and Windows, use e.g.gitlab_runner_wanted_version: 12.4.1
. On Linux, usegitlab_runner_package_version
instead.gitlab_runner_concurrent
- The maximum number of global jobs to run concurrently. Defaults to the number of processor cores.gitlab_runner_registration_token
- The GitLab registration token. If this is specified, a runner will be registered to a GitLab server.gitlab_runner_coordinator_url
- The GitLab coordinator URL. Defaults tohttps://gitlab.com
.gitlab_runner_sentry_dsn
- Enable tracking of all system level errors to Sentrygitlab_runner_listen_address
- Enable/metrics
endpoint for Prometheus scraping.gitlab_runner_runners
- A list of gitlab runners to register & configure. Defaults to a single shell executor. See thedefaults/main.yml
file listing all possible options which you can be passed to a runner registration command.gitlab_runner_cache_type
- Variables to set s3 as a shared cache server. If set it requires variables listed below:gitlab_runner_cache_s3_server_address
gitlab_runner_cache_s3_access_key
gitlab_runner_cache_s3_access_key
gitlab_runner_cache_s3_bucket_name
gitlab_runner_cache_s3_bucket_location
gitlab_runner_cache_s3_insecure
gitlab_runner_cache_cache_shared
-
gitlab_runner_machine_options: []
- Foremost you need to pass an array of dedicated vars in the machine_options to configure your scaling runner:amazonec2-access-key
andamazonec2-secret-key
the keys of the dedicated IAM user with permission for EC2amazonec2-zone
amazonec2-region
amazonec2-vpc-id
amazonec2-subnet-id
amazonec2-use-private-address=true
amazonec2-security-group
amazonec2-instance-type
- you can also set
amazonec2-tags
to identify you instance more easily via aws-cli or the console.
-
MachineDriver
- which should be set toamzonec2
when working on AWS -
MachineName
- Name of the machine. It must contain%s
, which will be replaced with a unique machine identifier. -
IdleCount
- Number of machines, that need to be created and waiting in Idle state. -
IdleTime
- Time (in seconds) for machine to be in Idle state before it is removed.
In addition you could set off peak settings. This lets you select a regular time periods when no work is done. For example most of commercial companies are working from Monday to Friday in a fixed hours, eg. from 10am to 6pm. In the rest of the week - from Monday to Friday at 12am-9am and 6pm-11pm and whole Saturday and Sunday - no one is working. These time periods we’re naming here as Off Peak.
gitlab_runner_machine_off_peak_periods
gitlab_runner_machine_off_peak_idle_time
gitlab_runner_machine_off_peak_idle_count
For details follow these links:
- gitlab-docs/runner: advanced configuration: runners.machine section
- gitlab-docs/runner: autoscale: supported cloud-providers
- gitlab-docs/runner: autoscale_aws: runners.machine section
See the config for more options
- hosts: all
remote_user: root
vars_files:
- vars/main.yml
roles:
- { role: riemers.gitlab-runner }
Inside vars/main.yml
gitlab_runner_registration_token: 'HUzTMgnxk17YV8Rj8ucQ'
gitlab_runner_runners:
- name: 'Example Docker GitLab Runner'
# token is an optional override to the global gitlab_runner_registration_token
token: 'HUzTMgnxk17YV8Rj8ucQ'
executor: docker
docker_image: 'alpine'
tags:
- node
- ruby
- mysql
docker_volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
- "/cache"
extra_configs:
runners.docker:
memory: 512m
allowed_images: ["ruby:*", "python:*", "php:*"]
runners.docker.sysctls:
net.ipv4.ip_forward: "1"
how vars/main.yml
would look like, if you setup an autoscaling GitLab-Runner on AWS:
gitlab_runner_registration_token: 'HUzTMgnxk17YV8Rj8ucQ'
gitlab_runner_coordinator_url: 'https://gitlab.com'
gitlab_runner_runners:
- name: 'Example autoscaling GitLab Runner'
state: present
# token is an optional override to the global gitlab_runner_registration_token
token: 'HUzTMgnxk17YV8Rj8ucQ'
executor: 'docker+machine'
# Maximum number of jobs to run concurrently on this specific runner.
# Defaults to 0, simply means don't limit.
concurrent_specific: '0'
docker_image: 'alpine'
# Indicates whether this runner can pick jobs without tags.
run_untagged: true
extra_configs:
runners.machine:
IdleCount: 1
IdleTime: 1800
MaxBuilds: 10
MachineDriver: 'amazonec2'
MachineName: 'git-runner-%s'
MachineOptions: ["amazonec2-access-key={{ lookup('env','AWS_IAM_ACCESS_KEY') }}", "amazonec2-secret-key={{ lookup('env','AWS_IAM_SECRET_KEY') }}", "amazonec2-zone={{ lookup('env','AWS_EC2_ZONE') }}", "amazonec2-region={{ lookup('env','AWS_EC2_REGION') }}", "amazonec2-vpc-id={{ lookup('env','AWS_VPC_ID') }}", "amazonec2-subnet-id={{ lookup('env','AWS_SUBNET_ID') }}", "amazonec2-use-private-address=true", "amazonec2-tags=gitlab-runner", "amazonec2-security-group={{ lookup('env','AWS_EC2_SECURITY_GROUP') }}", "amazonec2-instance-type={{ lookup('env','AWS_EC2_INSTANCE_TYPE') }}"]
from https://docs.gitlab.com/runner/executors/docker_machine.html:
The first time you’re using Docker Machine, it’s best to execute manually
docker-machine create...
with your chosen driver and all options from the MachineOptions section. This will set up the Docker Machine environment properly and will also be a good validation of the specified options. After this, you can destroy the machine withdocker-machine rm [machine_name]
and start the Runner.
Feel free to add your name to the readme if you make a PR. A full list of people from the PR's is here
- Gastrofix for adding Mac Support
- Matthias Schmieder for adding Windows Support
- dniwdeus & rosenstrauch for adding AWS autoscale option