Skip to content

GitLab Runner

GitLab Runner

GitLab Runner to agent wykonujący joby zdefiniowane w .gitlab-ci.yml. Projekt automatyzuje instalację, konfigurację i hardening trzech maszyn runner (gitlab-runner-1025, gitlab-runner-1026, gitlab-runner-1027) dla domeny rachuna-net.pl.

Repozytorium

🔗 Repozytorium

Instalacja GitLab Runner za pomocą Ansible

Standaryzacja i automatyzacja infrastruktury CI/CD runner machines przez podejście Infrastructure-as-Code:

  • Hardening bezpieczeństwa — SSH, sudo, users, firewall rules
  • Zarządzanie konfiguracją — timezone, hostname, locale, packages
  • Automatyzacja GitLab Runner — instalacja, rejestracja, cache NFS
  • Zarządzanie certyfikatami TLS — integracja z HashiCorp Vault
  • Wersjonowanie infrastruktury — wszystko w Git (Conventional Commits)
#RolaTypOpis
1set-timezoneExternalUstawia timezone, locale, language
2users-managementExternalTworzy użytkowników, grupy, SSH keys
3sudoExternalKonfiguruje sudo policies
4set-hostnameExternalUstawia FQDN hostname
5install-packagesExternalInstaluje pakiety (APT/DNF/APK)
6certificatesExternalZarządza certyfikatami TLS + Vault
7gitlab-runnerLocalInstaluje i rejestruje GitLab Runner
Role defaults
    ↓ overridden by
Role vars/
    ↓ overridden by
group_vars/all/
    ↓ overridden by
group_vars/gitlab_runners/
    ↓ overridden by
host_vars/gitlab-runner-*/
.
├── playbooks/
│   ├── install.yml                     # Główny playbook
│   ├── test_connection.yml             # Test połączenia
│   └── roles/
│       ├── gitlab-runner/              # Local role: GitLab Runner setup
│       ├── certificates/               # Local role: Certificate handling
│       └── [external roles gitignored]
├── inventory/
│   ├── hosts.yml                       # Definicja hostów
│   ├── group_vars/
│   │   └── all/                        # Global variables
│   │       ├── main.yml
│   │       ├── certificates.yml
│   │       ├── users_accont.yml
│   │       ├── technical_account.yml
│   │       ├── groups.yml
│   │       ├── locale.yml
│   │       └── sshd_config.yml
│   └── host_vars/
│       ├── gitlab-runner-1025/
│       ├── gitlab-runner-1026/
│       └── gitlab-runner-1027/
└── requirements.yml                    # External roles (versioned)

Zmienne globalne (inventory/group_vars/all/main.yml)

Section titled “Zmienne globalne (inventory/group_vars/all/main.yml)”
inv_all_root_root_domain: rachuna-net.pl
inv_all_timezone: "Europe/Warsaw"
inv_all_locale: "en_US.UTF-8"
inv_all_language: "en_US"
inv_all_lc_all: "en_US.UTF-8"

Konfiguracja runnerów (inventory/group_vars/gitlab_runners/configuration.yml)

Section titled “Konfiguracja runnerów (inventory/group_vars/gitlab_runners/configuration.yml)”
inv_gitlab_runner_cache_nfs:
  path: /mnt/cache
  server: nfs.rachuna-net.pl

inv_host_gitlab_runner_configuration:
  concurrent: 4
  check_interval: 0

Per-host override (inventory/host_vars/gitlab-runner-1025/main.yml)

Section titled “Per-host override (inventory/host_vars/gitlab-runner-1025/main.yml)”
fqdn: gitlab-runner-1025.rachuna-net.pl
  1. Klonuj repozytorium

    git clone https://gitlab.com/pl.rachuna-net/infrastructure/gitlab-com/ansible.git
    cd ansible
  2. Instalacja external roles

    ansible-galaxy role install -f -r requirements.yml -p playbooks/roles
  3. Test połączenia z hostami

    ansible-playbook playbooks/test_connection.yml -i inventory/hosts.yml
  4. Dry-run (bez zmian)

    ansible-playbook playbooks/install.yml -i inventory/hosts.yml --check
  5. Pełna instalacja

    ansible-playbook playbooks/install.yml -i inventory/hosts.yml
# Uruchomienie tylko jednego role'a
ansible-playbook playbooks/install.yml -i inventory/hosts.yml -t gitlab-runner

# Dry-run z verbose output
ansible-playbook playbooks/install.yml -i inventory/hosts.yml --check -vvv

# Syntax check
ansible-playbook playbooks/install.yml --syntax-check

# Lista tasków bez wykonania
ansible-playbook playbooks/install.yml --list-tasks
  1. Dodaj hosta do inventory

    # inventory/hosts.yml
    gitlab_runners:
      children:
        nodes:
          hosts:
            gitlab-runner-1028:
  2. Utwórz host_vars

    mkdir -p inventory/host_vars/gitlab-runner-1028
  3. Skonfiguruj hostname

    # inventory/host_vars/gitlab-runner-1028/main.yml
    fqdn: gitlab-runner-1028.rachuna-net.pl
  4. Skonfiguruj runnera

    # inventory/host_vars/gitlab-runner-1028/gitlab-runner.yml
    inv_host_gitlab_runner_configuration:
      concurrent: 4
  5. Uruchom playbook

    ansible-playbook playbooks/install.yml -i inventory/hosts.yml
# Test połączenia
ansible-playbook playbooks/test_connection.yml -i inventory/hosts.yml

# Inventory validation
ansible-inventory -i inventory/hosts.yml --list
ansible-inventory -i inventory/hosts.yml --host gitlab-runner-1025

# Check mode
ansible-playbook playbooks/install.yml -i inventory/hosts.yml --check

# Verbose output (-v / -vv / -vvv)
ansible-playbook playbooks/install.yml -i inventory/hosts.yml -vvv
  • Certyfikaty mogą być przechowywane w HashiCorp Vault
  • Ustaw inv_certificates_vault_addr w inventory
  • Runner musi mieć dostęp do Vault (via IAM lub token)

Wszystkie external roles instalowane są z:

https://gitlab.com/pl.rachuna-net/artifacts/ansible-roles/
RolaWersjaCel
set-timezonev1.3.0Timezone + locale
users-managementv1.2.0Users + groups
sudov1.2.0Sudo policies
set-hostnamev1.2.0FQDN hostname
install-packagesv1.1.0System packages
certificatesv1.0.0TLS certificates
ssh-hardeningv1.2.0SSH hardening