Подключение runner к gitlab

0
(0)

Рассмотрим как можно подключить несколько раннеров, все с docker executor к gitlab. Один будет шаренный раннер и доступен из любого проекта, другой будет использоваться только под проект.

В качестве раннера я буду использовать ВМ со следующей конфигурацией.

Ruby
Vagrant.configure("2") do |config|
    config.vm.provider "virtualbox" do |vb|
      vb.gui = false
      vb.memory = 1024
      vb.cpus = 1
      vb.check_guest_additions = false
      config.vm.box_check_update = false
      config.vm.box = "bento/ubuntu-22.04"
    end
  
    config.vm.define "runner" do |node|
      node.vm.hostname = "runner"
      node.vm.network "public_network", ip: "192.168.10.20", bridge: "wlo1"
    end
  end

Запускаем VM:

Bash
vagrant up

Ставим докер:

Bash
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Далее, прежде чем запустить раннер, его нужно зарегистрировать. Это также можно сделать через docker, но перед этим, чтобы не было проблем с x509, так как в прошлой статье про установку gitlab я использовал само подписанные сертификаты, нужно этот самый сертификат добавить в раннер. Я создам директорию /etc/gitlab-runner/certs на раннере и положу содержимое файла /etc/gitlab/ssl/gitlab.crt с сервера гитлаба в /etc/gitlab-runner/certs/gitlab.dev.local.crt.

Сначала подключим «шаренный» раннер, он будет доступен в любом проекте. Для этого нужно получить в веб-интерфейсе гитлаба, регистрационный токен. У меня это путь «https://gitlab.dev.local/admin/runners».

Также конкретно в моей тестовой инсталяции не будет доступен адрес gitlab.dev.local с машины раннера, нужно либо добавить его в hosts, либо отключить systemd-resolved и прописать namespacer 192.168.10.100 (в моем случае) в resolv.conf. Ну либо настроить системный резолвер, но быстрее будет так, как я описал выше.

Создадим скрипт запуска регистрации раннера:

Bash
#!/bin/bash

docker run --rm -v /etc/gitlab-runner/config:/etc/gitlab-runner -v /etc/gitlab-runner/certs:/etc/gitlab-runner/certs:ro \
        gitlab/gitlab-runner register \
        --non-interactive \
        --url "https://gitlab.dev.local" \
        --registration-token "<registration_token>" \
        --executor "docker" \
        --docker-image alpine:latest \
        --description "docker-runner" \
        --tag-list "docker-runner"

Подход с регистрацией раннера с помощью registration-token объявлен как deprecated. В конце статьи я покажу как можно зарегистрировать раннер по новому флоу.

Теперь можно запустить сам раннер командой:

Bash
#!/bin/bash

docker run -d --name gitlab-runner --restart always \
        -v /etc/gitlab-runner/config:/etc/gitlab-runner \
        -v /etc/gitlab-runner/certs:/etc/gitlab-runner/certs:ro \
        -v /var/run/docker.sock:/var/run/docker.sock \
        gitlab/gitlab-runner:latest

В гитлабе должны увидеть, что он стал онлайн.

Напишем простой pipeline для проверки работы раннера.

Я завел репозиторий devops-ci, теперь его нужно склонировать. Перед этим нужно добавить ssh ключ в настройки аккаунта в gitlab.

Bash
export GIT_SSH_COMMAND='ssh -i ~/.ssh/private_key'
git clone git@gitlab.dev.local:root/devops-ci.git

В корне проекта создаем .gitlab-ci.yml следующего содержимого:

YAML
default:
  tags: [ docker-runner ]

stages:
  - test

test-runner:
  stage: test
  script:
    - echo "It's work!"

Делаем комит и проверяем:

Bash
git add .
git commit -m "Add test ci"
git push origin main

Регистрация проектного раннера

Выше мы сделали шаренный раннер, давайте теперь сделаем раннер, доступный только в конкретном проекте.

В настройках CI/CD проекта, в разделе runners, нужно получить регистрационный токен.

Пропишем его в созданный ранее регистрационный скрипт, изменим значение ключа —tag-list на docker-runner-devops-ci и выполним. В наш конфиг будет записан еще один раннер, который сразу же станет доступен в gitlab. Запускаться он будет в том же основном контейнере, что и раннер, который мы подключили первым, но в разных докер контейнерах внутри, так как мы используем docker executor. Если нужно запускать это в разных «управляющих контейнерах», то можно делать разные пути для конфиг файлов, использовать разные ВМ и так далее, тут уже управление ложиться на слой администрирования и того, что требуется в вашем проекте.

Поменяем тег раннера и проверим, запустив тот же пайплайн.

YAML
tags: [ docker-runner-devops-ci ]

Видим, что пайплайн выполнился на другом раннере.

Регистрация раннера без использования registration-token

Для этого нужно в админ панели создать раннер.

В https://gitlab.dev.local/admin/runners выбираем «new instance runner»

Далее заполняем предложенные поля.

И нажимаем «Create runner». На следующей странице увидим инструкцию и токен. Полученный токен нужно вставить в скрипт заменив ключ —registration-token на —token.

Насколько статья полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Оставить комментарий