Опис
GitLab Runner – аплікейшен, який працює з GitLab CI/CD для виконання завдань. Це дозволяє запускати CI/CD процеси на різних серверах, в цілях продуктивності та безпеки. Ранер можна розгорнути як в Kubernetes так і на звичайному сервері. Доступний для наступних операційних систем:
- GNU/Linux
- macOS
- FreeBSD
- Windows
Варіації встановлення:
- Запустити в docker контейнері або описати в docker-compose.
- Розгорнути в kubernetes.
- Завантажити бінарний файл.
- Використовувати репозиторій rpm/deb пакети.
Наразі коротко розглянемо які типи ранерів бувають:
Типи ранерів:
- Shared – загальні, доступні для кожного.
- Group – тільки для груп проектів, тобто раннери доступний всім проектас в групі
- Specific – спеціальний, як варіант можна такий додати для певного проекту в якому є чуттєві данні або великонавантаженого.
Вся різниця при підключенні тільки в токенах. Для того, щоб зробити ранет одного з типів потрібен певний тип токена, нижче розглянемо всі варіанти.
Інсталяція
В цьому випадку оберемо встановлення з репозиторію, додаємо репозиторій:
curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh" | sudo bash
Встановлюємо:
sudo yum install gitlab-runner
Для підключення Shared runner потрібно перейти в Menu > Admin > Overview > Runners, натиснути Register an instance runner, скопіювати токен й використати його під час реєстрації:
Group Runner
Обрати GitLab > Groups > Group Name > CI/CD > Runners, натиснути Register an instance runner, скопіювати токен:
Special Runner
Обираємо Projects > PROJECT_NAME > Settings > Ci/CD > Runners, в полі Specific runners скопіювати токен:
де:
- specific runners – інформація і токен про те як підключити ранер
- avaliable specific runners – список доступних спеціальних ранерів
Після того як визначилися який ранер нам потрібен, переходимо до реєстрації.
Для реєстрації ранера додаємо токен в наступну команду(ключі можна змінювати в залежності ваших потреб):
gitlab-runner register \ --non-interactive \ --url "https://example.com" \ --registration-token "9**********" \ --executor "docker" \ --docker-image alpine:latest \ --description "test-runner" \ --maintenance-note "Free-form maintainer notes about this runner" \ --tag-list "AWS" \ --run-untagged="true" \ --locked="false" \ --access-level="not_protected" \ --machine-max-growth-rate "10"
де:
- –non-interactive – не інтерактивне підлючення
- –url – вказуємо посилання на сервер gitlab
- –registration-token – той самий токен про який згадувалося вище
- –executor – що буде основою для виконання команд (shell, docker, kubernetes, etc)
- –docker-image – докер образ який буде використовувати ранер
- –description – тут можна описати для кого або для яких цілей даний ранер
- –maintenance-note – будь які інформація про даний ранер
- –tag-list – скисок тегів за допомогою яких будуть запускатися завдання
- –run-untagged=true – даний параметр дозволяє запускати завдання без тегів
- –locked=”false”
- –access-level=”non_protected”
- –machine-max-growth-rate “10” – максимальна кількісь одночасних завдань яке може працювати
отримали наступний вивід після запуску команди:
Runtime platform arch=amd64 os=linux pid=15777 revision=43b2dc3d version=15.4.0 Running in system-mode. Registering runner... succeeded runner=9FGLU9jL Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! Configuration (with the authentication token) was saved in "/etc/gitlab-runner/config.toml"
Перевіряємо доданий ранер в gitlab:
Як бачимо додали саме шаред ранер, який буде загальний для всіх. Тепер створимо просте завдання та запустимо його з проекту.
Створимо в проекті файл gitlab-ci.yml з простим пайплайном:
default: image: centos:latest test-job: stage: test script: - echo "Hello frob GitLab Runner" when: manual tags: - test-runner
запустимо його CI/CD > Pipelines > Run pipeline й переглядаємо вивід:
Running with gitlab-runner 15.4.0 (43b2dc3d) on test runner H4LyxFS8 Resolving secrets 00:00 Preparing the "docker" executor Using Docker executor with image centos:latest ... Pulling docker image centos:latest ... Using docker image sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6 for centos:latest with digest centos@sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177 ... Preparing environment Running on runner-h4lyxfs8-project-376-concurrent-0 via test-server-1a... Getting source from Git repository 00:02 Fetching changes with git depth set to 20... Initialized empty Git repository in /builds/******/test-project-for-gitlabrunner/.git/ Created fresh repository. Checking out a6a2958a as main... Skipping Git submodules setup Executing "step_script" stage of the job script 00:01 Using docker image sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6 for centos:latest with digest centos@sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177 ... $ echo "Hello frob GitLab Runner" Hello frob GitLab Runner Cleaning up project directory and file based variables 00:01 Job succeeded
Далі все елементарно, розібратися з пайплайнами та побудовою повноцінної CI/CD)