This guide deploys GitLab Runner in a Docker container with persistent config storage using Ansible.
/srv/gitlab-runner directory- name: Deploy GitLab Runner with Docker
hosts: gitlab_runner
become: true
vars:
gitlab_url: https://gitlab.com
gitlab_runner_token: ""
gitlab_runner_description: ansible-runner-01
gitlab_runner_executor: docker
gitlab_runner_tag_list: "docker"
tasks:
- name: Install Docker on Debian family
ansible.builtin.apt:
update_cache: true
name:
- docker.io
state: present
when: ansible_os_family == "Debian"
- name: Install Docker on RHEL family
ansible.builtin.dnf:
name:
- docker
state: present
when: ansible_os_family == "RedHat"
- name: Enable Docker service
ansible.builtin.systemd:
name: docker
enabled: true
state: started
- name: Create GitLab Runner config directory
ansible.builtin.file:
path: /srv/gitlab-runner/config
state: directory
mode: "0755"
- name: Run GitLab Runner container
ansible.builtin.command: >
docker run -d
--name gitlab-runner
--restart always
-v /srv/gitlab-runner/config:/etc/gitlab-runner
-v /var/run/docker.sock:/var/run/docker.sock
gitlab/gitlab-runner:latest
args:
creates: /etc/docker/gitlab-runner/config.toml
- name: Register runner when token is provided
ansible.builtin.command: >
docker exec gitlab-runner gitlab-runner register
--non-interactive
--url {{ gitlab_url }}
--token {{ gitlab_runner_token }}
--executor {{ gitlab_runner_executor }}
--description "{{ gitlab_runner_description }}"
--tag-list "{{ gitlab_runner_tag_list }}"
when: gitlab_runner_token | length > 0
ansible-playbook -i inventory.ini gitlab-runner-docker-install.yml