snap and gitlab-CI: error: cannot communicate with server: Post http://localhost/v2/snaps/hello-world
snap and gitlab-CI: error: cannot communicate with server: Post http://localhost/v2/snaps/hello-world
如果我尝试 运行 在 gitlab-CI 管道下捕捉,安装最简单的包,它失败了:
$ snap install hello-world
error: cannot communicate with server: Post
http://localhost/v2/snaps/hello-world: dial unix /run/snapd.socket:
connect: no such file or directory
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
怎么回事?
不幸的是,快照使用了 docker 使用的许多底层安全技术,而且它们的表现不是很好。安装 snap 还需要 snapd 为 运行,它不在 docker 中(因此出现错误)。恐怕您今天根本无法在 docker 容器中可靠地安装快照。
请注意,还有其他非 docker 基于 CI 的系统。您可以通过一些自定义工作,使用 LXD 作为 GitLab CI 运行器的后端,它可以很好地处理快照。您还可以使用 GitHub 操作,它似乎基于 Azure VM,它也可以很好地处理快照。
似乎 GithubActionsCI 不使用 Docker 所以我现在使用它而不是 GitLabCI 来构建和测试 snap 包。
请注意:
- 您需要 sudo 来使用 apt-get 安装 snap,以及使用 snap 命令安装任何 snap 包。
- 如果你想 运行
snapcraft
(构建包,而不仅仅是测试它们),通过 apt-get
获取它是可行的,但给出的版本有点旧(例如,它不支持布局)。如果你想要更新的版本,你可以使用 snap install snapcraft
通过 snap 安装它,但是你需要一些变通方法来使它成为 运行,例如 sudo chown root:root /
并传递 --destructive-mode
标志(参见 https://forum.snapcraft.io/t/permissions-problem-using-snapcraft-in-azure-pipelines/13258/16)。
在我的例子中,它是通过启动 snapd
服务解决的:
systemctl start snapd.service
如果我尝试 运行 在 gitlab-CI 管道下捕捉,安装最简单的包,它失败了:
$ snap install hello-world
error: cannot communicate with server: Post http://localhost/v2/snaps/hello-world: dial unix /run/snapd.socket: connect: no such file or directory
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
怎么回事?
不幸的是,快照使用了 docker 使用的许多底层安全技术,而且它们的表现不是很好。安装 snap 还需要 snapd 为 运行,它不在 docker 中(因此出现错误)。恐怕您今天根本无法在 docker 容器中可靠地安装快照。
请注意,还有其他非 docker 基于 CI 的系统。您可以通过一些自定义工作,使用 LXD 作为 GitLab CI 运行器的后端,它可以很好地处理快照。您还可以使用 GitHub 操作,它似乎基于 Azure VM,它也可以很好地处理快照。
似乎 GithubActionsCI 不使用 Docker 所以我现在使用它而不是 GitLabCI 来构建和测试 snap 包。
请注意:
- 您需要 sudo 来使用 apt-get 安装 snap,以及使用 snap 命令安装任何 snap 包。
- 如果你想 运行
snapcraft
(构建包,而不仅仅是测试它们),通过apt-get
获取它是可行的,但给出的版本有点旧(例如,它不支持布局)。如果你想要更新的版本,你可以使用snap install snapcraft
通过 snap 安装它,但是你需要一些变通方法来使它成为 运行,例如sudo chown root:root /
并传递--destructive-mode
标志(参见 https://forum.snapcraft.io/t/permissions-problem-using-snapcraft-in-azure-pipelines/13258/16)。
在我的例子中,它是通过启动 snapd
服务解决的:
systemctl start snapd.service