您好,登錄后才能下訂單哦!
這篇文章主要介紹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 的方法。在這里我將提供兩種方法:
artifact —— 在運行 build 任務的時候我們可以將 snaps 保存為一個 CircleCI 的 artifact(LCTT 譯注:artifact 是 snapcraft.yaml 中的一個 Plugin-specific 關鍵字),然后在接下來的任務中檢索它。CircleCI 工作流有自己處理共享 artifact 的方式,相關信息可以在 這里 找到。
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軟件包”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。