Подготовка инфраструктуры

Требования

  • GitLab;

  • Linux-хост для установки GitLab Runner, имеющий:

    • Bash;

    • Git версии 2.18.0 или выше;

    • GPG.

Установка GitLab Runner

Установите GitLab Runner на выделенный для него хост, следуя официальным инструкциям.

Настройка окружения для сборки с Buildah

Для установки Buildah выполните следующие инструкции на хосте для GitLab Runner:

  • Установите пакет Buildah, следуя официальным инструкциям, но не производите его дальнейшую настройку. Если для вашего дистрибутива нет готовых пакетов Buildah, используйте следующие инструкции:
Ручная установка Buildah
  • Установите пакеты, предоставляющие программы newuidmap и newgidmap.

  • Убедитесь, что программы newuidmap и newgidmap имеют корректные права:

    sudo setcap cap_setuid+ep /usr/bin/newuidmap
    sudo setcap cap_setgid+ep /usr/bin/newgidmap
    sudo chmod u-s,g-s /usr/bin/newuidmap /usr/bin/newgidmap
    
  • Установите пакет, предоставляющий файлы /etc/subuid и /etc/subgid.

  • Убедитесь, что в файлах /etc/subuid и /etc/subgid имеется строка вида gitlab-runner:1000000:65536, где:

    • gitlab-runner — имя пользователя GitLab Runner;

    • 1000000 — первый subUID/subGID в выделяемом диапазоне;

    • 65536 — размер диапазона subUIDs/subGIDs (минимум 65536).

    Избегайте коллизий с другими диапазонами, если они имеются. Изменение файлов может потребовать перезагрузки. Подробнее в man subuid и man subgid.

  • (Для Linux 5.12 и ниже) Установите пакет, предоставляющий программу fuse-overlayfs.

  • Убедитесь, что путь /home/gitlab-runner/.local/share/containers создан, и пользователь gitlab-runner имеет доступ на чтение и запись.

  • Команда sysctl -ne kernel.unprivileged_userns_clone НЕ должна вернуть 0, а иначе выполните echo 'kernel.unprivileged_userns_clone = 1' | sudo tee -a /etc/sysctl.conf && sudo sysctl -p.

  • Команда sysctl -n user.max_user_namespaces должна вернуть 15000 или больше, а иначе выполните echo 'user.max_user_namespaces = 15000' | sudo tee -a /etc/sysctl.conf && sudo sysctl -p.

  • (Для Ubuntu 23.10 и выше) установите значения kernel.apparmor_restrict_unprivileged_unconfined и kernel.apparmor_restrict_unprivileged_userns в 0 командой:{ echo "kernel.apparmor_restrict_unprivileged_userns = 0" && echo "kernel.apparmor_restrict_unprivileged_unconfined = 0";} | sudo tee -a /etc/sysctl.d/20-apparmor-donotrestrict.conf && sudo sysctl -p /etc/sysctl.d/20-apparmor-donotrestrict.conf

Установка werf

Для установки werf на хосте для GitLab Runner выполните:

curl -sSL https://werf.io/install.sh | bash -s -- --ci

Регистрация GitLab Runner

Для регистрации GitLab Runner в GitLab следуйте официальным инструкциям, указав Shell в качестве executor’а. При желании после регистрации произведите дополнительную конфигурацию GitLab Runner’а.

Конфигурация container registry

Включите сборщик мусора вашего container registry.

Подготовка системы к кроссплатформенной сборке (опционально)

Данный шаг требуется только для сборки образов для платформ, отличных от платформы системы, где запущен werf.

Регистрируем в системе эмуляторы с помощью образа qemu-user-static:

docker run --restart=always --name=qemu-user-static -d --privileged --entrypoint=/bin/sh multiarch/qemu-user-static -c "/register --reset -p yes && tail -f /dev/null"

Настройка проекта

Настройка проекта GitLab

Конфигурация CI/CD проекта

Так может выглядеть репозиторий, использующий werf для сборки и развертывания:

Дополнительно:

  • Добавьте для werf cleanup опции авторизации в container registry, следуя инструкциям.