Перейти к основному содержимому
Облачный сервер с GitLab Runner
Последнее изменение:

Облачный сервер с GitLab Runner

GitLab Runner — открытое программное обеспечение, используется для автоматизации и выполнения задач (пайплайнов) в GitLab CI/CD. Работает как агент, который последовательно выполняет шаги, определенные в задачах пайплайна. Позволяет запускать сборку, тестирование и развертывание приложений в автоматическом режиме и управлять всем процессом выполнения задач CI/CD в GitLab. В облачном сервере GitLab Runner работает в Docker-контейнере.

Можно создать облачный сервер с готовым приложением GitLab Runner.

Если вам нужно запустить несколько раннеров в одном Docker-контейнере, увеличите количество раннеров. Для запуска нескольких задач CI/CD включите параллельное выполнение задач.

Создать облачный сервер с GitLab Runner

  1. В панели управления в верхнем меню нажмите Продукты и выберите Облачные серверы.

  2. Нажмите Создать сервер.

  3. В блоке Имя и расположение:

    3.1. В поле Имя введите имя сервера. Оно будет установлено как имя хоста в операционной системе.

    3.2. В полях Регион и Пул выберите регион и сегмент пула, в котором будет создан сервер. От сегмента пула зависит список доступных конфигураций сервера и стоимость ресурсов. После создания сервера изменить сегмент пула нельзя.

  4. В блоке Источник выберите источник, из которого будет создан сервер.

    Нажмите на имя источника по умолчанию, откройте вкладку Приложения, выберите Cloud GitLab Runner <version> и нажмите Выбрать.

  5. В блоке Конфигурация выберите конфигурацию сервера от 2 vCPU, RAM от 2 ГБ и размером загрузочного диска от 8 ГБ:

    • фиксированную конфигурацию — линейки, в которых зафиксировано соотношение ресурсов;
    • или произвольную конфигурацию, в которой можно указать любое соотношение ресурсов.

    В конфигурациях используются разные процессоры в зависимости от линейки и сегмента пула.

    5.1. Чтобы выбрать фиксированную конфигурацию, нажмите Фиксированная, откройте вкладку с нужной линейкой и выберите конфигурацию.

    5.2. Чтобы выбрать произвольную конфигурацию, нажмите Произвольная, укажите количество vCPU и размер RAM.

    5.3. Чтобы в качестве загрузочного диска сервера выбрать локальный диск, отметьте чекбокс Локальный SSD NVMe диск. Чтобы в качестве загрузочного диска выбрать сетевой диск, не отмечайте чекбокс.

    Объем оперативной памяти, который выделяется серверу, может быть меньше указанного в конфигурации — ядро операционной системы резервирует часть оперативной памяти в зависимости от версии ядра и дистрибутива. Выделенный объем на сервере можно проверить с помощью команды sudo dmesg | grep Memory.

    После создания сервера можно изменить конфигурацию.

  6. Если вы не отметили чекбокс Локальный SSD NVMe диск на шаге 5.3., в качестве загрузочного диска сервера будет использоваться первый указанный сетевой диск. В блоке Диски:

    6.1. В поле Тип диска выберите тип сетевого загрузочного диска.

    6.2. Укажите размер сетевого загрузочного диска в ГБ или ТБ. Учитывайте лимиты сетевых дисков на максимальный размер.

  7. Добавьте дополнительный сетевой диск сервера. В блоке Диски:

    7.1. В поле Тип диска выберите тип сетевого диска.

    7.2. Укажите размер сетевого диска в ГБ или ТБ. Учитывайте лимиты сетевых дисков на максимальный размер.

    7.3. Чтобы добавить другой дополнительный диск, нажмите Добавить, выберите тип диска и укажите его размер.

    После создания сервера можно подключить новые дополнительные диски.

  8. В блоке Сеть в поле Подсеть выберите подсеть, которую вы создали, и в поле Приватный IP укажите приватный IP-адрес сервера.

  9. В блоке Доступ:

    9.1. Разместите на сервере SSH-ключ для безопасного подключения.

    Чтобы добавить в облачную платформу новый SSH-ключ, нажмите Добавить SSH-ключ, введите имя ключа, вставьте публичный SSH-ключ в формате OpenSSH и нажмите Добавить.

    Если SSH-ключ добавлен в облачную платформу, в поле SSH-ключ выберите существующий ключ.

    9.2. Опционально: в поле Пароль для «root» скопируйте пароль пользователя root (пользователь с неограниченными правами на все действия над системой). Сохраните пароль в безопасном месте и не передавайте в открытом виде.

  10. В блоке Дополнительные настройки:

    10.1. Опционально: если вы планируете создать несколько серверов и хотите повысить отказоустойчивость инфраструктуры, добавьте сервер в группу размещения. Чтобы создать новую группу, нажмите Создать группу, введите имя группы и выберите политику размещения на разных хостах:

    • желательно — soft-anti-affinity. Система постарается разместить серверы на разных хостах. Если при создании сервера не будет подходящего хоста, он будет создан на том же хосте;
    • обязательно — anti-affinity. Серверы в группе обязательно располагаются на разных хостах. Если при создании сервера не будет подходящего хоста, сервер не будет создан.

    Если группа создана, в поле Группа размещения выберите группу размещения.

    10.2. Опционально: добавьте теги сервера, чтобы добавить дополнительную информацию или фильтровать серверы в списке. Автоматически добавляются теги операционной системы и конфигурации. Чтобы добавить новый тег, в поле Теги введите тег.

  11. В блоке Автоматизация в поле User data вставьте скрипт, который выполнится при загрузке системы:

    #cloud-config

    write_files:
    - path: "/opt/gomplate/values/user-values.yaml"
    permissions: "0644"
    content: |
    gitlabURL: "<gitlab_server_url>"
    token: "<runner_token>"

    Укажите:

    • <gitlab_server_url> — URL сервера с GitLab, к которому подключается GitLab Runner;
    • <runner_token> — регистрационный токен для GitLab Runner. Можно получить по инструкции Create a project runner with a runner authentication token официальной документации GitLab.
  12. Проверьте цену облачного сервера.

  13. Нажмите Создать.

Увеличить количество раннеров

  1. Подключитесь к облачному серверу.

  2. В файл /opt/gomplate/templates/gitlab-runner-env.tpl добавьте URL:

    echo 'export RUNNER_GITLAB_URL_2="https://<gitlab_server_url>"' >> /opt/gomplate/templates/gitlab-runner-env.tpl

    Укажите <gitlab_server_url> — URL сервера с GitLab, к которому подключается GitLab Runner.

  3. Если второй раннер добавляется для другого GitLab сервера, в файл /opt/gomplate/templates/gitlab-runner-env.tpl добавьте токен раннера:

    echo 'export RUNNER_REGISTRATION_TOKEN_2="<runner_token>"' >> /opt/gomplate/templates/gitlab-runner-env.tpl

    Укажите <runner_token> — регистрационный токен для GitLab Runner. Можно получить по инструкции Create a project runner with a runner authentication token официальной документации GitLab.

  4. В скрипт /opt/gitlab-runner-pre-flight.sh добавьте регистрацию нового раннера:

    • в функцию register_runner:

      sed -i '/register_runner () {/,/^}/ {
      /^}/ i\
      echo "Register additional runner"\
      docker run -i --rm \\\
      -v /etc/gitlab-runner:/etc/gitlab-runner \\\
      gitlab/gitlab-runner:ubuntu-v17.5.4 register \\\
      --non-interactive \\\
      --url "\${RUNNER_GITLAB_URL_2}" \\\
      --token "\${RUNNER_REGISTRATION_TOKEN_2}" \\\
      --template-config /etc/gitlab-runner/config-template.toml \\\
      --executor "docker" \\\
      \${RUNNER_ADDITIONAL_PARAMS}
      }' /opt/gitlab-runner-pre-flight.sh
    • в функцию register_legacy_runner:

      sed -i '/register_legacy_runner () {/,/^}/ {
      /^}/ i\
      echo "Register additional runner"\
      docker run -i --rm \\\
      -v /etc/gitlab-runner:/etc/gitlab-runner \\\
      gitlab/gitlab-runner:ubuntu-v17.5.4 register \\\
      --non-interactive \\\
      --url "\${RUNNER_GITLAB_URL_2}" \\\
      --registration-token "\${RUNNER_REGISTRATION_TOKEN_2}" \\\
      --template-config /etc/gitlab-runner/config-template.toml \\\
      --executor "docker" \\\
      \${RUNNER_ADDITIONAL_PARAMS}
      }' /opt/gitlab-runner-pre-flight.sh
  5. Перезагрузите сервис:

    sudo systemctl restart gitlab-runner

Включить параллельное выполнение задач CI/CD

к сведению

Параллельное выполнения задач CI/CD может снизить производительность раннера.

  1. Подключитесь к облачному серверу.

  2. В файле /etc/gitlab-runner/config.toml укажите количество параллельных задач в параметре concurrent:

    sed -i '1 i\concurrent = 2' /etc/gitlab-runner/config.toml