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

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

Подготовительные действия

Установите docker, скачайте раннер и настройте demo.yaml файл конфигурации CI/CD.

💡

Для проверки примеров CI/CD с конфигурацией demo.yaml доступен репозиторий CICD_examples, ветка demo (opens in a new tab), в нем:

  • подготовлен файл конфигурации .gitverse/workflows/demo.yaml;
  • загружен раннер act_runner.

Конфигурация demo.yaml

Файл demo.yaml следует расположить в директории .gitverse/workflows вашего проекта, он определяет конфигурацию работы CI/CD для GitVerse:

name: Демонстрация GitVerse CI/CD
on:
  push:
jobs:
  build-test:
    name: Test context
    runs-on: ubuntu-latest
    steps:
      - name: Display event name
        run: echo ${{ gitverse.event_name }}
      - name: Display Workflow
        run: echo ${{ gitverse.workflow }}
      - name: Display repository name
        run: echo ${{ gitverse.Repository}}
      - name: Display repository owner
        run: echo ${{ gitverse.repository_owner }}
      - name: Display actor
        run: echo ${{ gitverse.actor }}
⚠️

Раннер так же обработает .yaml файлы в директории .github/workflows.

Структура:

  • name: Название конфигурации CI/CD - "Демонстрация GitVerse CI/CD";
  • on: Определяет события, на которые реагирует CI/CD:
    • push: В данном случае, это событие push;
  • jobs: Определяет список задач, которые нужно выполнить:
    • build-test:
      • name: Test context Название задачи;
      • runs-on: ubuntu-latest Определяет операционную систему, на которой будет выполняться задача;
      • steps: Список шагов, которые нужно выполнить в рамках задачи. Каждый шаг имеет:
        • name: Название шага
        • run: Команда, которую нужно выполнить в рамках шага, используя переменные окружения GitVerse, такие как gitverse.event_name, gitverse.workflow, gitverse.Repository, gitverse.repository_owner, gitverse.actor.

Каждый шаг выполняет команду echo для вывода соответствующей переменной окружения GitVerse:

  1. Display event name. Команда echo ${{ gitverse.event_name }} выводит значение переменной event_name из переменных окружения GitVerse;
  2. Display Workflow. Команда echo ${{ gitverse.workflow }} выводит значение переменной workflow из переменных окружения GitVerse;
  3. Display repository name. Команда echo ${{ gitverse.Repository }} выводит значение переменной Repository из переменных окружения GitVerse;
  4. Display repository owner. Команда echo ${{ gitverse.repository_owner }} выводит значение переменной repository_owner из переменных окружения GitVerse;
  5. Display actor. Команда echo ${{ gitverse.actor }} выводит значение переменной actor из переменных окружения GitVerse.

Установка Docker (Ubuntu)

⚠️

Установка Docker может потребовать от вас рутовых прав.

  1. Обновите индекс пакета apt:

    sudo apt update
  2. Установите пакеты, позволяющие apt использовать репозиторий через HTTPS:

    sudo apt install apt-transport-https ca-certificates curl software-properties-common
  3. Добавьте открытый ключ GPG Docker:

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  4. Установите стабильный репозиторий:

    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  5. Повторно обновите индекс пакета apt:

    sudo apt update
  6. Установите Docker:

    sudo apt install docker-ce
  7. Запустить службу Docker:

    sudo systemctl start docker

    Проверьте версию докера::

    $ sudo docker --version
    Docker version 27.1.1, build 6312585

    Проверьте, что докер исполняется:

    $ sudo systemctl status docker
    docker.service - Docker Application Container Engine
      Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
    ...

Запуск раннеров

Запуск бинарного раннера с интерактивной регистрацией

  1. Создайте yaml файл demo.yaml рабочего процесса (workflow) в каталоге ./gitverse/workflows/ репозитория.

  2. Скачайте бинарный файл раннера и поместите раннер в каталог вашего проекта.

    Раннер работает только с заданиями из репозитория, к которому он привязан.

  3. Сделайте файл исполняемым и проверьте, что скачанный файл соответствует вашей ОС.

    Пример:

    chmod +x act_runner
    ./act_runner --version

    Успешным будет ответ вида:

    act_runner version 40a6fce
  4. Включите CI/CD в профиле вашего репозитория (Настройки>Репозиторий>CI/CD>Обновить).

    Пример:

    включение CI/CD в настройках репозитория
  5. Получите регистрационный токен раннера (Настройки>Раннеры>Добавить раннер>копировать токен).

    Пример:

    полечение ригистрационного токена
  6. Зарегистрируйте раннер, используя полученный токен.

    Пример:

    ./act_runner register

    У вас запросят регистрационный токен, введите его:

    INFO Registering runner, arch=amd64, os=linux, version=40a6fce. 
    WARN Runner in user-mode.                         
    INFO Enter the runner token: 
    <token>

    Далее введите имя раннера:

    INFO Enter the runner name (if set empty, use hostname: <host name>): 
    demo-runner

    (Опционально) введите лейбл раннера:

    INFO Enter the runner labels, leave blank to use the default labels (comma-separated, for example, ubuntu-20.04:docker://node:16-bullseye,ubuntu-18.04:docker://node:16-buster,linux_arm:host):
    runnerlabel

    Пример сообщения об успешной регистрации:

    INFO Registering runner, name=demo-runner, instance=https://gitverse.ru/sc, labels=[runnerlabel]. 
    DEBU Successfully pinged the GitVerse instance server 
    INFO Runner registered successfully. 

    Регистрационный токен раннера может быть активирован только один раз.

    💡

    После регистрации в текущей директории появится файл .runner. Он хранит данные регистрации – не редактируйте его вручную! Если файл потеряется или повредится, удалите его и повторите регистрацию. При необходимости можно указать иное местоположение файла через конфигурацию.

  7. После регистрации раннер отобразится со статусом "Недоступен" (Профиль репозитория>Настройки>Раннеры).

    Пример:

    зарегистрированный бинарный раннер
  8. Запустите службу Docker.

    Пример:

    sudo systemctl start docker

    Проверьте версию докера::

    $ sudo docker --version
    Docker version 27.1.1, build 6312585

    Проверьте, что докер исполняется:

    $ sudo systemctl status docker
    docker.service - Docker Application Container Engine
      Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
      ...
  9. Запустите раннер.

    Пример:

    sudo ./act_runner daemon

    Пример сообщения об успешном запуске:

    INFO[0000] Starting runner daemon
  10. Статус раннера изменится после запуска (Профиль репозитория>Настройки>Раннеры).

    Пример:

    Измененный статус раннера 244
  11. Внесите изменения в репозиторий, чтобы раннер среагировал на событие push.

    Пример:

    Провокация раннера на push
  12. В профиле репозитория на вкладке CI/CD отразится выполненная работа по данному коммиту.

    Пример:

    Выполненная работа раннера

    Кликните на задачу, чтобы посмотреть детали:

    Детали раннера

Запуск бинарного раннера на виртуальной машине cloud.ru

  1. Зарегистрируйтесь/войдите на cloud.ru и создайте виртуальную машину (opens in a new tab).

    Пример:

    Виртуальные машины
  2. Подключитесь к ВМ по SSH (opens in a new tab).

    Пример:

    ssh author@194.5.93.199

    Отобразится сообщение об успешном соединении. После установления соединения по SSH, вы сможете взаимодействовать с ВМ через командную строку для выполнения команд и управления сервером:

    Выбор виртуальной машины

    Логин и публичный IP для подключения к ВМ можно посмотреть в настройках данной ВМ, нажмите на ВМ:

    Выбор виртуальной машины

    На открывшейся странице отображены нужные для подключения по SSH данные:

    отмечены login и внешний IP
  3. В терминале ВМ создайте ключи SSH и привяжите к аккаунту GitVerse.

    Пример:

    Введите:

    Выбор виртуальной машины

    Отобразится:

    $ ssh-keygen -t rsa
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/author/.ssh/id_rsa): 
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in /home/author/.ssh/id_rsa
    Your public key has been saved in /home/author/.ssh/id_rsa.pub
  4. В консоли ВМ клонируйте репозиторий.

    Пример:

    sudo git clone ssh://git@gitverse.ru:2222/author/actions-repo.git
  5. Зайдите в папку с клонированным проектом:

    Пример:

    cd ~/Work/actions-repo
  6. Далее выполните действия с первого шага для запуска бинарного раннера с интерактивной регистрацией.

Запуск раннера в Docker контейнере на виртуальной машине cloud.ru

  1. Зарегистрируйтесь/войдите на cloud.ru и создайте виртуальную машину (далее - ВМ) (opens in a new tab).

    Пример:

    Виртуальные машины
  2. Подключитесь к ВМ по SSH (opens in a new tab). Логин и публичный IP можно посмотреть в настройках данной ВМ.

    Пример:

    ssh author@194.5.93.199
  3. В терминале ВМ создайте ключи SSH и привяжите к аккаунту GitVerse.

    Пример:

    $ ssh-keygen -t rsa
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/author/.ssh/id_rsa): 
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in /home/author/.ssh/id_rsa
    Your public key has been saved in /home/author/.ssh/id_rsa.pub
  4. Клонируйте репозиторий.

    Пример:

    sudo git clone ssh://git@gitverse.ru:2222/author/actions-repo.git
  5. Зайдите в папку с клонированным проектом:

    Пример:

    cd ~/Work/actions-repo
  6. Создайте yaml файл demo.yaml рабочего процесса (workflow) в каталоге ./gitverse/workflows/ репозитория.

  7. Запустите службу Docker.

    Пример:

    sudo systemctl start docker

    Проверьте версию докера::

    $ sudo docker --version
    Docker version 27.1.1, build 6312585

    Проверьте, что докер исполняется:

    $ sudo systemctl status docker
    docker.service - Docker Application Container Engine
      Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
    ...
  8. Скачайте докер образ раннера.

    Пример:

    sudo docker pull gitverse.ru/gitverse/act-runner:3.0.1

    Должно прийти сообщение вида:

    3.0.1: Pulling from gitverse/act-runner
    3c854c8cbf46: Pull complete 
    7d93e3aa1115: Pull complete 
    6c0aaec6dc7c: Pull complete 
    0ef879a0db1b: Pull complete 
    Digest: sha256:28e6ea0f8ecca9cccc5c9cae6022cb9878a948b10413320b5c7546b5cd9533fb
    Status: Downloaded newer image for gitverse.ru/gitverse/act-runner:3.0.1
    gitverse.ru/gitverse/act-runner:3.0.1
  9. Получите регистрационный токен раннера (Настройки>Раннеры>Добавить раннер>копировать токен).

    Пример:

    полечение ригистрационного токена
  10. Выполните запуск и регистрацию докера в контейнере:

    Пример:

    sudo docker run \
          -v /var/run/docker.sock:/var/run/docker.sock \
          -e RUNNER_REGISTRATION_TOKEN=aQFelOnS7FqA9eCFUkjSJD06ztdWjk3gaRrSjNVp \
          gitverse.ru/gitverse/act-runner:3.0.1

    Должно прийти сообщение вида:

    level=info msg="Registering runner, arch=amd64, os=linux, version=40a6fce."
    level=debug msg="Successfully pinged the GitVerse instance server"
    level=info msg="Runner registered successfully."
    SUCCESS
    time="2024-04-24T17:23:27Z" level=info msg="Starting runner daemon"
    time="2024-04-24T17:23:28Z" level=info msg="task 1573 repo is author/actions-repo https://github.com https://gitverse.ru/sc"
    ⚠️

    При первом запуске произойдет скачивание образа контейнера. При последующих запусках раннер начнет исполняться сразу после выполнения команды.

    В профиле репозитория на вкладке Настройки>Ранеры отобразится новый статус раннера:

    Докер раннер простаивает
  11. Внесите изменения в репозиторий, чтобы раннер среагировал на событие push.

    Пример:

    Провокация раннера на push
  12. В профиле репозитория на вкладке CI/CD отразится выполненная работа по данному коммиту.

    Пример:

    Выполненная работа раннера

    Кликните на задачу, чтобы посмотреть детали:

    Детали раннера

Запуск раннера в фоновом режиме и запись логов в файл

Для раннера в Docker контейнере

Для запуска раннера в фоновом режиме добавьте в команду опцию -d, а также перенаправление вывода 2>&1 (stdout и stderr) в указанный файл лога. Убедитесь, что у вас есть права на запись в указанный файл лога.

Пример:

sudo docker run -d \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -e RUNNER_REGISTRATION_TOKEN=TjrvgIS5Vk0jD6C1zd313CiQ3v9KB8OFznzXt2KE \
    gitverse.ru/gitverse/act-runner:3.0.1 > logfile2.log 2>&1
Прерывание процесса Docker
  1. Узнайте идентификатор контейнера, запустив команду:

    sudo docker ps

    Придет сообщение вида:

    $ sudo docker ps
    CONTAINER ID   IMAGE                                   COMMAND                  CREATED              STATUS              PORTS     NAMES
    5f1aca58bf5d   gitverse.ru/gitverse/act-runner:3.0.1   "/sbin/tini -- /opt/…"   About a minute ago   Up About a minute             zealous_bhabha
  2. Затем используйте команду docker stop с идентификатором контейнера, чтобы его остановить:

    sudo docker stop 5f1aca58bf5d

Для бинарного раннера

nohup sudo ./act_runner daemon &> ./runner.log &

Пояснение:

  1. nohup - запускает команду, игнорируя сигналы SIGHUP, что позволяет продолжить работу после завершения сеанса пользователя;
  2. sudo ./act_runner daemon - запускает бинарный файл act_runner в режиме демона с привилегиями суперпользователя;
  3. &> ./runner.log - перенаправляет стандартный вывод и стандартный вывод ошибок в файл runner.log;
  4. & - запускает процесс в фоновом режиме.
Прерывание процесса

Для прерывания процесса выполните:

sudo pkill act_runner

или

sudo pkill <PID>
Получение PID процессов

Чтобы посмотреть запущенные вами процессы выполните:

ps ux

Чтобы посмотреть все процессы в системе выполните:

ps aux

Обе команды ps aux и ps ux покажут вам список запущенных процессов, их PID (идентификатор процесса), использование CPU и памяти и другую информацию.