返回顶部
首页 > 资讯 > 操作系统 >linux如何使用Snapcraft构建、测试并发布Snap软件包
  • 728
分享到

linux如何使用Snapcraft构建、测试并发布Snap软件包

2023-06-16 12:06:58 728人浏览 安东尼
摘要

这篇文章主要介绍linux如何使用Snapcraft构建、测试并发布Snap软件包,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!snapcraft 是一个正在为其在 Linux  中的地位而奋斗的包管理系统

这篇文章主要介绍linux如何使用Snapcraft构建、测试并发布Snap软件包,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

snapcraft 是一个正在为其在 Linux  中的地位而奋斗的包管理系统,它为你重新设想了分发软件的方式。这套新的跨发行版的工具可以用来帮助你构建和发布 snap 软件包。接下来我们将会讲述怎么使用  CircleCI 2.0 来加速这个过程以及一些在这个过程中的可能遇到的问题。

snap 软件包是什么?snapcraft 又是什么?

snap 是用于 Linux 发行版的软件包,它们在设计的时候吸取了像 Android 这样的移动平台和物联网设备上分发软件的经验教训。snapcraft  这个名字涵盖了 snap 和用来构建它们的命令行工具、这个 snapcraft.io 网站,以及在这些技术的支撑下构建的几乎整个生态系统。

snap 软件包被设计成用来隔离并封装整个应用程序。这些概念使得 snapcraft 提高软件安全性、稳定性和可移植性的目标得以实现,其中可移植性允许单个  snap 软件包不仅可以在 ubuntu 的多个版本中安装,而且也可以在 Debian、Fedora 和 Arch 等发行版中安装。snapcraft  网站对其的描述如下:

为每个 Linux 桌面、服务器、云端或设备打包任何应用程序,并且直接交付更新。

在 CircleCI 2.0 上构建 snap 软件包

在 CircleCI 上使用 CircleCI 2.0 语法 来构建 snap 和在本地机器上基本相同。在本文中,我们将会讲解一个示例配置文件。如果您对  CircleCI 还不熟悉,或者想了解更多有关 2.0 的入门知识,您可以从 这里 开始。

基础配置

version: 2 jobs:   build:     Machine: true     working_directory: ~/project     steps:       - checkout       - run:           command: |             sudo apt update && sudo apt install -y snapd             sudo snap install snapcraft --edge --classic             /snap/bin/snapcraft

这个例子使用了 machine 执行器来安装用于管理运行 snap 的可执行程序 snapd 和制作 snap 的 snapcraft 工具。

由于构建过程需要使用比较新的内核,所以我们使用了 machine 执行器而没有用 Docker 执行器。在这里,Linux v4.4  已经足够满足我们的需求了。

用户空间的依赖关系

上面的例子使用了 machine 执行器,它实际上是一个内核为 Linux v4.4 的 Ubuntu 14.04 (Trusty) 虚拟机。如果  Trusty 仓库可以满足你的 project/snap 构建依赖,那就没问题。如果你的构建依赖需要其他版本,比如 Ubuntu 16.04  (Xenial),我们仍然可以在 machine 执行器中使用 Docker 来构建我们的 snap 软件包 。

version: 2 jobs:   build:     machine: true     working_directory: ~/project     steps:       - checkout       - run:           command: |             sudo apt update && sudo apt install -y snapd             docker run -v $(pwd):$(pwd) -t ubuntu:xenial sh -c "apt update -qq && apt install snapcraft -y && cd $(pwd) && snapcraft"

这个例子中,我们再次在 machine 执行器的虚拟机中安装了 snapd,但是我们决定将 snapcraft 安装在 Ubuntu Xenial  镜像构建的 Docker 容器中,并使用它来构建我们的 snap。这样,在 snapcraft 运行的过程中就可以使用在 Ubuntu 16.04 中可用的所有  apt 包。

测试

在我们的博客、文档以及互联网上已经有很多讲述如何对软件代码进行单元测试的内容。搜索你的语言或者框架和单元测试或者 CI 可以找到大量相关的信息。在  CircleCI 上构建 snap 软件包,我们最终会得到一个 .snap 的文件,这意味着除了创造它的代码外我们还可以对它进行测试。

工作流

假设我们构建的 snap 软件包是一个 WEBapp,我们可以通过测试套件来确保构建的 snap 可以正确的安装和运行,我们也可以试着安装它或者使用  selenium 来测试页面加载、登录等功能正常工作。但是这里有一个问题,由于 snap 是被设计成可以在多个 Linux  发行版上运行,这就需要我们的测试套件可以在 Ubuntu 16.04、Fedora 25 和 Debian 9 等发行版中可以正常运行。这个问题我们可以通过  CircleCI 2.0 的工作流来有效地解决。

工作流是在最近的 CircleCI 2.0 测试版中加入的,它允许我们通过特定的逻辑流程来运行离散的任务。这样,使用单个任务构建完 snap  后,我们就可以开始并行的运行 snap 的发行版测试任务,每个任务对应一个不同的发行版的 Docker 镜像 (或者在将来,还会有其他可用的执行器)。

这里有一个简单的例子:

workflows:   version: 2   build-test-and-deploy:     jobs:       - build       - acceptance_test_xenial:           requires:             - build       - acceptance_test_fedora_25:           requires:             - build       - acceptance_test_arch:           requires:             - build       - publish:           requires:             - acceptance_test_xenial             - acceptance_test_fedora_25             - acceptance_test_arch

在这个例子中首先构建了 snap,然后在四个不同的发行版上运行验收测试。如果所有的发行版都通过测试了,那么我们就可以运行发布 job,以便在将其推送到  snap 商店之前完成剩余的 snap 任务。

留着 .snap 包

为了测试我们在工作流示例中使用的 .snap 软件包,我们需要一种在构建的时候持久保存 snap 的方法。在这里我将提供两种方法:

  1. artifact —— 在运行 build 任务的时候我们可以将 snaps 保存为一个 CircleCI 的 artifact(LCTT  译注:artifact 是 snapcraft.yaml 中的一个 Plugin-specific 关键字),然后在接下来的任务中检索它。CircleCI  工作流有自己处理共享 artifact 的方式,相关信息可以在 这里 找到。

  2. snap 商店通道 —— 当发布 snap 软件包到 snap 商店时,有多种通道可供我们选择。将 snap 的主分支发布到 edge  通道以供内部或者用户测试已经成为一种常见做法。我们可以在 build 任务中完成这些工作,然后接下来的的任务就可以从 edge 通道来安装构建好的 snap  软件包。

***种方法速度更快,并且它还可以在 snap 软包上传到 snap 商店供用户甚至是测试用户使用之前对 snap  进行验收测试。第二种方法的好处是我们可以从 snap 商店安装 snap,这也是 CI 运行期间的测试项之一。

snap 商店的身份验证

snapcraft-config-generator.py 脚本可以生成商店证书并将其保存到 .snapcraft/snapcraft.cfg  中(注意:在运行公共脚本之前一定要对其进行检查)。如果觉得在你仓库中使用明文来保存这个文件不安全,你可以用 base64  编码该文件,并将其存储为一个私有环境变量,或者你也可以对文件 进行加密,并将密钥存储在一个私有环境变量中。

下面是一个示例,将商店证书放在一个加密的文件中,并在 deploy 环节中使用它将 snap 发布到 snap 商店中。

- deploy:     name: Push to Snap Store     command: |       openssl aes-256-cbc -d -in .snapcraft/snapcraft.encrypted -out .snapcraft/snapcraft.cfg -k $KEY       /snap/bin/snapcraft push *.snap

除了 deploy 任务之外,工作流示例同之前的一样, deploy 任务只有当验收测试任务通过时才会运行。

以上是“linux如何使用Snapcraft构建、测试并发布Snap软件包”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网操作系统频道!

--结束END--

本文标题: linux如何使用Snapcraft构建、测试并发布Snap软件包

本文链接: https://lsjlt.com/news/283691.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • linux如何使用Snapcraft构建、测试并发布Snap软件包
    这篇文章主要介绍linux如何使用Snapcraft构建、测试并发布Snap软件包,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!snapcraft 是一个正在为其在 Linux  中的地位而奋斗的包管理系统...
    99+
    2023-06-16
  • 如何实现在Linux中将应用程序打包为Snap软件包格式
    这篇文章主要讲解了“如何实现在Linux中将应用程序打包为Snap软件包格式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何实现在Linux中将应用程序打包为Snap软件包格式”吧!在 L...
    99+
    2023-06-12
  • 基于nginx的PHP本地测试环境构建软件pinyshop发布的示例分析
    这期内容当中小编将会给大家带来有关基于nginx的PHP本地测试环境构建软件pinyshop发布的示例分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。PHP+MySQL应用的范围很广,在这里我们将为大家...
    99+
    2023-06-17
  • Android下如何使用JUnit进行软件测试
      软件测试作为程序员必备的一项技能是决定软件开发周期长短以及软件运行成败的关键,可以说好的软件不是代码写得好而是有效的测试决定的。本文将介绍在android下利用ecli...
    99+
    2022-06-06
    junit 软件测试 测试 软件 Android
  • Java如何使用JMeter进行高并发测试
    这篇文章主要介绍了Java如何使用JMeter进行高并发测试,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。软件的压力测试是一种保证软件质量的行为.在金融,电商等领域应用比较普...
    99+
    2023-06-25
  • 如何使用AppImage进行Linux软件包管理
    小编给大家分享一下如何使用AppImage进行Linux软件包管理,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!使用 AppImage我全面投入到了  ...
    99+
    2023-06-15
  • 如何使用Go和Apache打包并发布Git代码?
    Git是目前最流行的版本控制系统之一,而Go语言则是一种高效的编程语言。本文将介绍如何使用Go和Apache打包并发布Git代码。 1.安装Go 首先,您需要安装Go。可以从官方网站https://golang.org/下载最新版本的Go...
    99+
    2023-11-04
    apache 打包 git
  • 如何使用jMeter构造大量并发HTTP请求进行微服务性能测试
    这篇文章将为大家详细讲解有关如何使用jMeter构造大量并发HTTP请求进行微服务性能测试,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。比如我开发好了一个微服务,想测试其在大并发请求下的性能表现如何。比较...
    99+
    2023-06-02
  • 如何使用Lvs+Nginx集群搭建高并发架构
    这篇文章主要介绍“如何使用Lvs+Nginx集群搭建高并发架构”,在日常操作中,相信很多人在如何使用Lvs+Nginx集群搭建高并发架构问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用Lvs+Nginx...
    99+
    2023-06-22
  • 如何在PHP中使用并发编程和分布式架构处理大文件?
    随着互联网的快速发展,数据量不断增长,而大文件处理是其中一个重要的问题。对于PHP开发者来说,如何使用并发编程和分布式架构处理大文件是一个值得关注的问题。本文将介绍如何使用PHP实现并发编程和分布式架构来处理大文件。 并发编程 并发编程...
    99+
    2023-09-22
    并发 文件 分布式
  • Linux系统中如何使用开源软件创建SDN
    这篇文章跟大家分析一下“Linux系统中如何使用开源软件创建SDN”。内容详细易懂,对“Linux系统中如何使用开源软件创建SDN”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学习“L...
    99+
    2023-06-28
  • linux中如何使用yum命令查看已安装的软件包
    这篇文章主要为大家展示了“linux中如何使用yum命令查看已安装的软件包”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“linux中如何使用yum命令查看已安装的软件包”这篇文章吧。yum是一个...
    99+
    2023-06-27
  • 如何在Linux系统中使用PHP来加载和管理软件包?
    在Linux系统中使用PHP来加载和管理软件包是一个非常方便的操作。PHP作为一种流行的服务器端编程语言,可以很容易地与Linux系统进行交互。本文将介绍如何使用PHP来加载和管理软件包,并提供一些演示代码。 一、安装PHP 在开始之前,我...
    99+
    2023-11-04
    load linux linux
  • 如何安装 iOS 15 开发者测试版并试用带面具和通用控件的面容 ID
    如何安装 iOS 15 开发者测试版如果您尚未注册为 Apple 开发人员,则需要在此处注册(每年 99 美元)。对您的 iPhone 或 iPad 进行全新备份在您的 iPhone 或 iPad 上,前往 Apple 的开发者网站点击左上...
    99+
    2023-07-30
  • 如何使用Python和Apache构建高效的分布式文件系统?
    在当今信息化的时代,数据量越来越大,因此,构建一个高效的分布式文件系统是非常必要的。本文将介绍如何使用Python和Apache构建高效的分布式文件系统。 Apache Hadoop简介 Apache Hadoop是一个开源的分布式文...
    99+
    2023-07-31
    apache 文件 分布式
  • 如何构建 Golang RESTful API,并使用中间件进行身份验证?
    本文介绍了如何构建 golang restful api。首先,通过导入必要的库、定义数据模型和创建路由来构建 restful api。其次,使用 go-chi/chigot 和 go-...
    99+
    2024-05-14
    golang git
  • 如何在 Java 中使用 NumPy 开发技术并打包成可执行文件?
    Java 是一种非常流行的编程语言,而 NumPy 是一种用于科学计算的 Python 库。虽然 NumPy 是用 Python 编写的,但是我们可以在 Java 中使用 NumPy 开发技术。在本文中,我们将介绍如何在 Java 中使用 ...
    99+
    2023-06-03
    打包 numy 开发技术
  • linux如何使用Yum历史查找已安装或已删除的软件包信息
    这篇文章主要为大家展示了“linux如何使用Yum历史查找已安装或已删除的软件包信息”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“linux如何使用Yum历史查找已安装或已删除的软件包信息”这篇...
    99+
    2023-06-16
  • 从0搭建Vue3组件库如何使用 glup 打包组件库并实现按需加载
    目录使用 glup 打包组件库并实现按需加载自动按需引入插件删除打包文件使用 gulpgulp 打包样式打包组件使用 glup 打包组件库并实现按需加载 当我们使用 Vite 库模式...
    99+
    2023-03-23
    glup 打包组件库按需加载 vue3 glup 打包 vue打包组件库
  • 开发智能应用的新范式:大数据、AI和云原生如何构建智能软件
    文章目录 1.利用大数据实现智能洞察2. 集成人工智能和机器学习3. 云原生架构的弹性和灵活性4. 实现实时处理和响应5. 数据安全和隐私保护6. 可解释性和透明性7. 持续创新和迭代8. 数据伦理和合规性 ...
    99+
    2023-08-30
    大数据 人工智能 云原生
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作