#docker #gitlab #gitlab-ci #snapcraft
#docker #gitlab #gitlab-ci #snapcraft
Вопрос:
Если я попытаюсь запустить snap в конвейере gitlab-CI, установив самый простой пакет, произойдет сбой с:
$ snap install привет, мир
ошибка: не удается установить связь с сервером: Сообщениеhttp://localhost/v2/snaps/hello-world : наберите unix /run/snapd.socket: connect: нет такого файла или каталога
Файл конфигурации gitlab-ci yml является самым простым из всех:
image: ubuntu:18.04
before_script:
- apt-get update -qq
test:
script:
- apt-get install -y snapd
- snap version
- snap install hello-world
- hello-world
Что происходит?
Ответ №1:
В моем случае это решается путем запуска snapd
службы:
systemctl start snapd.service
Комментарии:
1. вы уверены? вы тестировали это в GitLabCI?
Ответ №2:
К сожалению, привязки используют многие базовые технологии безопасности, используемые docker, и они не очень хорошо работают. Для установки snap также требуется запуск snapd, которого нет в docker (отсюда и ошибка). Боюсь, сегодня вы просто не можете надежно установить привязки в контейнерах docker.
Обратите внимание, что существуют другие системы CI, не основанные на docker. Вы можете, выполнив небольшую пользовательскую работу, использовать LXD в качестве серверной части для вашего GitLab CI runner, который отлично обрабатывает привязки. Вы также можете использовать действия GitHub, которые, похоже, основаны на виртуальной машине Azure, которая также отлично обрабатывает привязки.
Ответ №3:
Кажется, GithubActionsCI не использует Docker, поэтому я использую это сейчас вместо GitLabCI для сборки и тестирования пакетов snap.
Просто обратите внимание:
- Вам нужен sudo для установки snap с помощью apt-get, а также для установки любого пакета snap с помощью команды snap.
- Если вы хотите запустить
snapcraft
(для сборки пакетов, а не просто их тестирования), получение его черезapt-get
работает, но выдает версию, которая немного устарела (например, она не поддерживает макеты). Если вам нужна более новая версия, вы можете установить ее через snap с помощьюsnap install snapcraft
но вам нужны некоторые обходные пути для ее запуска, такие какsudo chown root:root /
и передача--destructive-mode
флага (см. https://forum.snapcraft.io/t/permissions-problem-using-snapcraft-in-azure-pipelines/13258/16 ).