snap 和 gitlab-CI:错误:无法与服务器通信:发布 http://localhost/v2/snaps/hello-world

kno*_*cte 6 gitlab docker gitlab-ci snapcraft

如果我尝试在 gitlab-CI 管道下运行 snap,安装最简单的包,它会失败:

$ snap install hello-world

错误:无法与服务器通信:发布 http://localhost/v2/snaps/hello-world:拨号 unix /run/snapd.socket:连接:没有这样的文件或目录

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
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?

Kyl*_*yle 6

不幸的是,snap 使用了 docker 使用的许多底层安全技术,而且它们的性能不是很好。安装 snap 还需要运行 snapd,但它不在 docker 中(因此出现错误)。恐怕您现在根本无法在 docker 容器中可靠地安装 snap。

请注意,还有其他非基于 docker 的 CI 系统。您可以通过一些自定义工作,使用LXD作为 GitLab CI 运行程序的后端,它可以很好地处理快照。您还可以使用 GitHub Actions,它似乎基于 Azure VM,它也可以很好地处理快照。


小智 5

就我而言,可以通过启动snapd服务来解决:

systemctl start snapd.service
Run Code Online (Sandbox Code Playgroud)


kno*_*cte 2

似乎 GithubActionsCI 不使用 Docker,所以我现在使用它而不是 GitLabCI 来构建和测试 snap 包。

请注意:

  • 您需要 sudo 才能使用 apt-get 安装 snap,也需要使用 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)。