这篇文章主要介绍linux怎样使用Snapcraft建立、测试并发布Snap软件包,文中介绍的十分详尽,具有一定的参考价值,感兴趣的男子伴们一定要看完!
snapcraft是一个正在为其在Linux中的地位而拼搏的包管理系统,它为你重新构想了分发软件的形式。这套新的跨发行版的工具可以拿来帮助你建立和发布snap软件包。接出来我们将会述说如何使用CircleCI2.0来加速这个过程以及一些在这个过程中的可能碰到的问题。
snap软件包是哪些?snapcraft又是哪些?
snap是用于Linux发行版的软件包,它们在设计的时侯汲取了像Android这样的联通平台和物联网设备上分发软件的经验教训。snapcraft这个名子囊括了snap和拿来建立它们的命令行工具、这个snapcraft.io网站,以及在这种技术的支撑下建立的几乎整个生态系统。
snap软件包被设计成拿来隔离并封装整个应用程序。这种概念促使snapcraft提升软件安全性、稳定性和可移植性的目标得以实现,其中可移植性容许单个snap软件包除了可以在Ubuntu的多个版本中安装,但是也可以在Debian、Fedora和Arch等发行版中安装。snapcraft网站对其的描述如下:
为每位Linux桌面、服务器、云端或设备打包任何应用程序,而且直接交付更新。
在CircleCI2.0上建立snap软件包
在CircleCI上使用CircleCI2.0句型来建立snap和在本地机器上基本相同。在本文中,我们将会讲解一个示例配置文件。倘若您对CircleCI还不熟悉,或则想了解更多有关2.0的入门知识linux操作系统简介,您可以从这儿开始。
基础配置
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工具。
因为建立过程须要使用比较新的内核linux发行版测试网站,所以我们使用了machine执行器而没有用docker执行器。在这儿,Linuxv4.4早已足够满足我们的需求了。
用户空间的依赖关系
里面的事例使用了machine执行器,它实际上是一个内核为Linuxv4.4的Ubuntu14.04(Trusty)虚拟机。假如Trusty库房可以满足你的project/snap建立依赖,那就没问题。假如你的建立依赖须要其他版本,例如Ubuntu16.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安装在UbuntuXenial镜像建立的Docker容器中,并使用它来建立我们的snap。这样,在snapcraft运行的过程中就可以使用在Ubuntu16.04中可用的所有apt包。
测试
在我们的博客、文档以及互联网上早已有好多述说怎样对软件代码进行单元测试的内容。搜索你的语言或则框架和单元测试或则CI可以找到大量相关的信息。在CircleCI上建立snap软件包,我们最终会得到一个.snap的文件,这意味着不仅创造它的代码外我们还可以对它进行测试。
工作流
假定我们建立的snap软件包是一个webapp,我们可以通过测试套件来确保建立的snap可以正确的安装和运行,我们也可以试着安装它或则使用Selenium来测试页面加载、登录等功能正常工作。并且这儿有一个问题,因为snap是被设计成可以在多个Linux发行版上运行,这就须要我们的测试套件可以在Ubuntu16.04、Fedora25和Debian9等发行版中可以正常运行。这个问题我们可以通过CircleCI2.0的工作流来有效地解决。
工作流是在近来的CircleCI2.0测试版中加入的,它容许我们通过特定的逻辑流程来运行离散的任务。这样,使用单个任务建立完snap后linux 输入法,我们就可以开始并行的运行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的方式。在这儿我将提供两种方式:
artifact——在运行build任务的时侯我们可以将snaps保存为一个CircleCI的artifact(LCTT评注:artifact是snapcraft.yaml中的一个Plugin-specific关键字),之后在接出来的任务中检索它。CircleCI工作流有自己处理共享artifact的方法,相关信息可以在这儿找到。
snap商店通道——当发布snap软件包到snap商店时linux发行版测试网站,有多种通道可供我们选择。将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软件包”这篇文章的所有内容,谢谢诸位的阅读!希望分享的内容对你们有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!