這篇文章主要介紹linux如何使用Snapcraft構(gòu)建、測(cè)試并發(fā)布Snap軟件包,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比晉安網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式晉安網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋晉安地區(qū)。費(fèi)用合理售后完善,十年實(shí)體公司更值得信賴。
snapcraft 是一個(gè)正在為其在 Linux 中的地位而奮斗的包管理系統(tǒng),它為你重新設(shè)想了分發(fā)軟件的方式。這套新的跨發(fā)行版的工具可以用來幫助你構(gòu)建和發(fā)布 snap 軟件包。接下來我們將會(huì)講述怎么使用 CircleCI 2.0 來加速這個(gè)過程以及一些在這個(gè)過程中的可能遇到的問題。
snap 軟件包是什么?snapcraft 又是什么?
snap 是用于 Linux 發(fā)行版的軟件包,它們?cè)谠O(shè)計(jì)的時(shí)候吸取了像 Android 這樣的移動(dòng)平臺(tái)和物聯(lián)網(wǎng)設(shè)備上分發(fā)軟件的經(jīng)驗(yàn)教訓(xùn)。snapcraft 這個(gè)名字涵蓋了 snap 和用來構(gòu)建它們的命令行工具、這個(gè) snapcraft.io 網(wǎng)站,以及在這些技術(shù)的支撐下構(gòu)建的幾乎整個(gè)生態(tài)系統(tǒng)。
snap 軟件包被設(shè)計(jì)成用來隔離并封裝整個(gè)應(yīng)用程序。這些概念使得 snapcraft 提高軟件安全性、穩(wěn)定性和可移植性的目標(biāo)得以實(shí)現(xiàn),其中可移植性允許單個(gè) snap 軟件包不僅可以在 Ubuntu 的多個(gè)版本中安裝,而且也可以在 Debian、Fedora 和 Arch 等發(fā)行版中安裝。snapcraft 網(wǎng)站對(duì)其的描述如下:
為每個(gè) Linux 桌面、服務(wù)器、云端或設(shè)備打包任何應(yīng)用程序,并且直接交付更新。
在 CircleCI 2.0 上構(gòu)建 snap 軟件包
在 CircleCI 上使用 CircleCI 2.0 語法 來構(gòu)建 snap 和在本地機(jī)器上基本相同。在本文中,我們將會(huì)講解一個(gè)示例配置文件。如果您對(duì) CircleCI 還不熟悉,或者想了解更多有關(guān) 2.0 的入門知識(shí),您可以從 這里 開始。
基礎(chǔ)配置
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
這個(gè)例子使用了 machine 執(zhí)行器來安裝用于管理運(yùn)行 snap 的可執(zhí)行程序 snapd 和制作 snap 的 snapcraft 工具。
由于構(gòu)建過程需要使用比較新的內(nèi)核,所以我們使用了 machine 執(zhí)行器而沒有用 docker 執(zhí)行器。在這里,Linux v4.4 已經(jīng)足夠滿足我們的需求了。
用戶空間的依賴關(guān)系
上面的例子使用了 machine 執(zhí)行器,它實(shí)際上是一個(gè)內(nèi)核為 Linux v4.4 的 Ubuntu 14.04 (Trusty) 虛擬機(jī)。如果 Trusty 倉(cāng)庫可以滿足你的 project/snap 構(gòu)建依賴,那就沒問題。如果你的構(gòu)建依賴需要其他版本,比如 Ubuntu 16.04 (Xenial),我們?nèi)匀豢梢栽?machine 執(zhí)行器中使用 Docker 來構(gòu)建我們的 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"
這個(gè)例子中,我們?cè)俅卧?machine 執(zhí)行器的虛擬機(jī)中安裝了 snapd,但是我們決定將 snapcraft 安裝在 Ubuntu Xenial 鏡像構(gòu)建的 Docker 容器中,并使用它來構(gòu)建我們的 snap。這樣,在 snapcraft 運(yùn)行的過程中就可以使用在 Ubuntu 16.04 中可用的所有 apt 包。
測(cè)試
在我們的博客、文檔以及互聯(lián)網(wǎng)上已經(jīng)有很多講述如何對(duì)軟件代碼進(jìn)行單元測(cè)試的內(nèi)容。搜索你的語言或者框架和單元測(cè)試或者 CI 可以找到大量相關(guān)的信息。在 CircleCI 上構(gòu)建 snap 軟件包,我們最終會(huì)得到一個(gè) .snap 的文件,這意味著除了創(chuàng)造它的代碼外我們還可以對(duì)它進(jìn)行測(cè)試。
工作流
假設(shè)我們構(gòu)建的 snap 軟件包是一個(gè) webapp,我們可以通過測(cè)試套件來確保構(gòu)建的 snap 可以正確的安裝和運(yùn)行,我們也可以試著安裝它或者使用 Selenium 來測(cè)試頁面加載、登錄等功能正常工作。但是這里有一個(gè)問題,由于 snap 是被設(shè)計(jì)成可以在多個(gè) Linux 發(fā)行版上運(yùn)行,這就需要我們的測(cè)試套件可以在 Ubuntu 16.04、Fedora 25 和 Debian 9 等發(fā)行版中可以正常運(yùn)行。這個(gè)問題我們可以通過 CircleCI 2.0 的工作流來有效地解決。
工作流是在最近的 CircleCI 2.0 測(cè)試版中加入的,它允許我們通過特定的邏輯流程來運(yùn)行離散的任務(wù)。這樣,使用單個(gè)任務(wù)構(gòu)建完 snap 后,我們就可以開始并行的運(yùn)行 snap 的發(fā)行版測(cè)試任務(wù),每個(gè)任務(wù)對(duì)應(yīng)一個(gè)不同的發(fā)行版的 Docker 鏡像 (或者在將來,還會(huì)有其他可用的執(zhí)行器)。
這里有一個(gè)簡(jiǎn)單的例子:
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
在這個(gè)例子中首先構(gòu)建了 snap,然后在四個(gè)不同的發(fā)行版上運(yùn)行驗(yàn)收測(cè)試。如果所有的發(fā)行版都通過測(cè)試了,那么我們就可以運(yùn)行發(fā)布 job,以便在將其推送到 snap 商店之前完成剩余的 snap 任務(wù)。
留著 .snap 包
為了測(cè)試我們?cè)诠ぷ髁魇纠惺褂玫?.snap 軟件包,我們需要一種在構(gòu)建的時(shí)候持久保存 snap 的方法。在這里我將提供兩種方法:
artifact —— 在運(yùn)行 build 任務(wù)的時(shí)候我們可以將 snaps 保存為一個(gè) CircleCI 的 artifact(LCTT 譯注:artifact 是 snapcraft.yaml 中的一個(gè) Plugin-specific 關(guān)鍵字),然后在接下來的任務(wù)中檢索它。CircleCI 工作流有自己處理共享 artifact 的方式,相關(guān)信息可以在 這里 找到。
snap 商店通道 —— 當(dāng)發(fā)布 snap 軟件包到 snap 商店時(shí),有多種通道可供我們選擇。將 snap 的主分支發(fā)布到 edge 通道以供內(nèi)部或者用戶測(cè)試已經(jīng)成為一種常見做法。我們可以在 build 任務(wù)中完成這些工作,然后接下來的的任務(wù)就可以從 edge 通道來安裝構(gòu)建好的 snap 軟件包。
***種方法速度更快,并且它還可以在 snap 軟包上傳到 snap 商店供用戶甚至是測(cè)試用戶使用之前對(duì) snap 進(jìn)行驗(yàn)收測(cè)試。第二種方法的好處是我們可以從 snap 商店安裝 snap,這也是 CI 運(yùn)行期間的測(cè)試項(xiàng)之一。
snap 商店的身份驗(yàn)證
snapcraft-config-generator.py 腳本可以生成商店證書并將其保存到 .snapcraft/snapcraft.cfg 中(注意:在運(yùn)行公共腳本之前一定要對(duì)其進(jìn)行檢查)。如果覺得在你倉(cāng)庫中使用明文來保存這個(gè)文件不安全,你可以用 base64 編碼該文件,并將其存儲(chǔ)為一個(gè)私有環(huán)境變量,或者你也可以對(duì)文件 進(jìn)行加密,并將密鑰存儲(chǔ)在一個(gè)私有環(huán)境變量中。
下面是一個(gè)示例,將商店證書放在一個(gè)加密的文件中,并在 deploy 環(huán)節(jié)中使用它將 snap 發(fā)布到 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 任務(wù)之外,工作流示例同之前的一樣, deploy 任務(wù)只有當(dāng)驗(yàn)收測(cè)試任務(wù)通過時(shí)才會(huì)運(yùn)行。
以上是“l(fā)inux如何使用Snapcraft構(gòu)建、測(cè)試并發(fā)布Snap軟件包”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
名稱欄目:linux如何使用Snapcraft構(gòu)建、測(cè)試并發(fā)布Snap軟件包
文章網(wǎng)址:http://chinadenli.net/article32/gphcpc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、品牌網(wǎng)站設(shè)計(jì)、企業(yè)建站、ChatGPT、全網(wǎng)營(yíng)銷推廣、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)