Linux中國

使用 snapcraft 將 snap 包發布到商店

Ubuntu Core 已經正式發布(LCTT 譯註:指 2016 年 11 月發布的 Ubuntu Snappy Core 16 ),也許是時候讓你的 snap 包進入商店了!

交付和商店的概念

首先回顧一下我們是怎麼通過商店管理 snap 包的吧。

每次你上傳 snap 包,商店都會為其分配一個修訂版本號,並且商店中針對特定 snap 包 的版本號都是唯一的。

但是第一次上傳 snap 包的時候,我們首先要為其註冊一個還沒有被使用的名字,這很容易。

商店中所有的修訂版本都可以釋放到多個通道中,這些通道只是概念上定義的,以便給用戶一個穩定或風險等級的參照,這些通道有:

  • 穩定(stable)
  • 候選(candidate)
  • 測試(beta)
  • 邊緣(edge)

理想情況下,如果我們設置了 CI/CD 過程,那麼每天或在每次更新源碼時都會將其推送到邊緣通道。在此過程中有兩件事需要考慮。

首先在開始的時候,你最好製作一個不受限制的 snap 包,因為在這種新範例下,snap 包的大部分功能都能不受限制地工作。考慮到這一點,你的項目開始時 confinement 將被設置為 devmode(LCTT 譯註:這是 snapcraft.yaml 中的一個鍵及其可選值)。這使得你在開發的早期階段,仍然可以讓你的 snap 包進入商店。一旦所有的東西都得到了 snap 包運行的安全模型的充分支持,那麼就可以將 confinement 修改為 strict

好了,假設你在限制方面已經做好了,並且也開始了一個對應邊緣通道的 CI/CD 過程,但是如果你也想確保在某些情況下,早期版本 master 分支新的迭代永遠也不會進入穩定或候選通道,那麼我們可以使用 gadge 設置。如果 snap 包的 gadge 設置為 devel (LCTT註:這是 snapcraft.yaml 中的一個鍵及其可選值),商店將會永遠禁止你將 snap 包釋放到穩定和候選通道。

在這個過程中,我們有時可能想要發布一個修訂版本到測試通道,以便讓有些用戶更願意去跟蹤它(一個好的發布管理流程應該比一個隨機的日常構建更有用)。這個階段結束後,如果希望人們仍然能保持更新,我們可以選擇關閉測試通道,從一個特定的時間點開始我們只計劃發布到候選和穩定通道,通過關閉測試通道我們將使該通道跟隨穩定列表中的下一個開放通道,在這裡是候選通道。而如果候選通道跟隨的是穩定通道後,那麼最終得到是穩定通道了。

進入 Snapcraft

那麼所有這些給定的概念是如何在 snapcraft 中配合使用的?首先我們需要登錄:

$ snapcraft login
Enter your Ubuntu One SSO credentials.
Email: sxxxxx.sxxxxxx@canonical.com
Password: **************
Second-factor auth: 123456

在登錄之後,我們就可以開始註冊 snap 了。例如,我們想要註冊一個虛構的 snap 包 awesome-database:

$ snapcraft register awesome-database
We always want to ensure that users get the software they expect
for a particular name.

If needed, we will rename snaps to ensure that a particular name
reflects the software most widely expected by our community.

For example, most people would expect 『thunderbird』 to be published by
Mozilla. They would also expect to be able to get other snaps of
Thunderbird as 'thunderbird-sergiusens'.

Would you say that MOST users will expect 'a' to come from
you, and be the software you intend to publish there? [y/N]: y

You are now the publisher for 'awesome-database'

假設我們已經構建了 snap 包,接下來我們要做的就是把它上傳到商店。我們可以在同一個命令中使用快捷方式和 --release 選項:

$ snapcraft push awesome-databse_0.1_amd64.snap --release edge
Uploading awesome-database_0.1_amd64.snap [=================] 100%
Processing....
Revision 1 of 'awesome-database' created.

Channel    Version    Revision
stable     -          -
candidate  -          -
beta       -          -
edge       0.1        1

The edge channel is now open. 

如果我們試圖將其發布到穩定通道,商店將會阻止我們:

$ snapcraft release awesome-database 1 stable
Revision 1 (devmode) cannot target a stable channel (stable, grade: devel) 

這樣我們不會搞砸,也不會讓我們的忠實用戶使用它。現在,我們將最終推出一個值得發布到穩定通道的修訂版本:

$ snapcraft push awesome-databse_0.1_amd64.snap
Uploading awesome-database_0.1_amd64.snap [=================] 100%
Processing....
Revision 10 of 'awesome-database' created. 

注意, 版本號 version (LCTT 譯註:這裡指的是 snap 包名中 0.1 這個版本號)只是一個友好的標識符,真正重要的是商店為我們生成的 修訂版本號 Revision (LCTT 譯註:這裡生成的修訂版本號為 10)。現在讓我們把它釋放到穩定通道:

$ snapcraft release awesome-database 10 stable
Channel    Version    Revision
stable     0.1        10
candidate  ^          ^
beta       ^          ^
edge       0.1        10

The 'stable' channel is now open. 

在這個針對我們正在使用架構最終的通道映射視圖中,可以看到邊緣通道將會被固定在修訂版本 10 上,並且測試和候選通道將會跟隨現在修訂版本為 10 的穩定通道。由於某些原因,我們決定將專註於穩定性並讓我們的 CI/CD 推送到測試通道。這意味著我們的邊緣通道將會略微過時,為了避免這種情況,我們可以關閉這個通道:

 $ snapcraft close awesome-database edge
Arch    Channel    Version    Revision
amd64   stable     0.1        10
        candidate  ^          ^
        beta       ^          ^
        edge       ^          ^

The edge channel is now closed. 

在當前狀態下,所有通道都跟隨著穩定通道,因此訂閱了候選、測試和邊緣通道的人也將跟蹤穩定通道的改動。比如就算修訂版本 11 只發布到穩定通道,其他通道的人們也能看到它。

這個清單還提供了完整的體系結構視圖,在本例中,我們只使用了 amd64。

獲得更多的信息

有時過了一段時間,我們想知道商店中的某個 snap 包的歷史記錄和現在的狀態是什麼樣的,這裡有兩個命令,一個是直截了當輸出當前的狀態,它會給我們一個熟悉的結果:

 $ snapcraft status awesome-database
Arch    Channel    Version    Revision
amd64   stable     0.1        10
        candidate  ^          ^
        beta       ^          ^
        edge       ^          ^ 

我們也可以通過下面的命令獲得完整的歷史記錄:

 $ snapcraft history awesome-database
Rev.    Uploaded              Arch       Version    Channels
3       2016-09-30T12:46:21Z  amd64      0.1        stable*
...
...
...
2       2016-09-30T12:38:20Z  amd64      0.1        -
1       2016-09-30T12:33:55Z  amd64      0.1        - 

結束語

希望這篇文章能讓你對 Snap 商店能做的事情有一個大概的了解,並讓更多的人開始使用它!

via: https://insights.ubuntu.com/2016/11/15/making-your-snaps-available-to-the-store-using-snapcraft/

譯者簡介:

snapcraft.io 的釘子戶,對 Ubuntu Core、Snaps 和 Snapcraft 有著濃厚的興趣,並致力於將這些還在快速發展的新技術通過翻譯或原創的方式介紹到中文世界。有興趣的小夥伴也可以關註譯者個人的公眾號: Snapcraft,近期會在上面連載幾篇有關 Core snap 發布策略、交付流程和驗證流程的文章,歡迎圍觀 :)

作者:Sergio Schvezov 譯者:Snapcrafter 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國