版本管理

Magdalena Skarbińska
Magdalena Skarbińska
Demián Renzulli
Demián Renzulli

隔離網頁應用程式 (IWA) 在網頁平台上提供高度信任、安全且版本獨立的執行階段環境。在正式環境中 (尤其是受管理企業),管理員和開發人員需要精細控管軟體部署作業。

為滿足這些需求,Chrome 提供完整的 IWA 版本管理功能,包括更新管道、版本固定和版本降級。這些功能可讓您預測部署作業,並在使用者族群中快速復原控制項。

可用性

版本管理行為取決於 IWA 是由管理員管理,還是由使用者直接安裝:

  • 受管理的 IWA:Chrome 133 起提供管理功能 (包括政策導向的固定和降級)。
  • 非受管 (使用者安裝) IWA:Chrome 150 起提供面向使用者的功能 (例如手動選取頻道)。

工作階段類型相容性

所有版本管理功能 (包括更新頻道和版本固定) 都與所有 ChromeOS 工作階段類型完全相容。包括:

  • 標準受管理使用者工作階段
  • 受管理的訪客工作階段 (MGS)
  • 專屬 Kiosk 模式環境

更新管道

開發人員可以使用更新管道,為不同的部署和測試對象區隔特定的應用程式版本。如要設定管道,請在應用程式更新資訊清單中,為每個版本項目新增選用的管道陣列欄位。這些頻道名稱不受限於固定平台關鍵字 (例如 canary 或 stable),而是由開發人員定義的任意 ID,格式必須為小寫 ASCII 英數字串 (可包含連字號或底線,但不得包含空格)。如果版本項目完全省略 channels 欄位,Chrome 會隱含地將其可用性預設為「default」管道。最後,管理政策中指定的頻道名稱必須與資訊清單中定義的字串完全相符;任何拼寫錯誤或設定不符,都會導致系統無法識別符合資格的版本,進而停止更新這些用戶端。

資訊清單設定

如要設定管道,請在網頁應用程式資訊清單中,為每個版本項目新增選用的 channels 陣列。以下是幾點注意事項:

  • 管道對應:如果版本項目定義了 channels 陣列,則該版本只能在指定管道上安裝。
  • 預設備用:如果版本項目完全省略 channels 欄位,Chrome 會假設該版本僅屬於 default 管道。
  • 字串完全相符:用戶端政策設定中指定的頻道名稱,必須與更新資訊清單中定義的字串完全相符 (區分大小寫)。如果沒有任何版本與指定頻道名稱相符,應用程式就無法找到符合資格的更新。

更新資訊清單範例

以下範例顯示支援多個發布管道的更新資訊清單:

{
  "versions": [
    {
      "version": "0.1.0",
      "src": "https://github.com/chromeos/iwa-sink/releases/download/v0.1.0/iwa-sink.swbn",
      "channels": ["delta"]
    },
    {
      "version": "0.2.0",
      "src": "https://github.com/chromeos/iwa-sink/releases/download/v0.2.0/iwa-sink.swbn",
      "channels": ["delta", "default"]
    },
    {
      "version": "0.3.0",
      "src": "https://github.com/chromeos/iwa-sink/releases/download/v0.3.0/iwa-sink.swbn",
      "channels": ["beta", "delta"]
    },
    {
      "version": "0.4.0",
      "src": "https://github.com/chromeos/iwa-sink/releases/download/v0.4.0/iwa-sink.swbn"
    }
  ]
}

根據這份資訊清單,每個指定管道可用的版本如下:

  • default: 0.2.0,0.4.0 (缺少明確管道,預設為 default)
  • delta: 0.1.0、0.2.0、0.3.0
  • beta: 0.3.0

IWA 更新引擎會查看應用程式更新資訊清單中的管道欄位,支援指定特定發布管道。

固定版本

在高度法規遵循或高度穩定的企業環境中,管理員必須確保裝置執行確切版本的業務關鍵軟體。管理員可以透過版本固定功能,將 IWA 鎖定在特定版本,停止所有後續的背景更新。這為企業提供高度可靠的方式,可維持穩定的設定,並遵守嚴格的內部或產業法規。

如要將隔離網頁應用程式 (IWA) 凍結在特定發布子版本,企業管理員可以設定 IsolatedWebAppInstallForceList 政策中的 pinned_version 屬性。這項功能主要透過 Google 管理控制台中應用程式詳細資料面板下的互動式 UI 控制項管理,並遵循標準 IWA 安裝工作流程,但管理員仍可彈性地直接使用原始 JSON 設定部署這些政策值。管理員成功指定有效的版本字串後,Chrome 會提取該特定套件,並封鎖所有後續的自動向前更新。

特殊行為和限制

  • 繼續更新 (取消固定):如要還原自動更新,請移除 pinned_version 屬性,或將其值變更為較新的目標版本。
  • 預設不降級:如果將 pinned_version 設為低於目前安裝的版本,除非明確啟用 allow_downgrades,否則「不會」觸發復原。
  • 無法使用的固定目標:如果指定的更新管道中缺少設定的 pinned_version,或版本比安裝的版本舊 (且停用降級),Chrome 會保留目前安裝的版本,並封鎖任何後續更新。
  • 全新部署:如果受管理裝置尚未安裝 IWA,且無法擷取指定的 pinned_version,或更新資訊清單中缺少該版本,則 IWA 將無法安裝。

版本降級中

如果新部署的更新導致重大錯誤或漏洞,管理員可能需要將裝置復原至先前的穩定狀態。Chrome 支援將已安裝的受管理 IWA 降級至較低版本,這項功能在先前僅允許向前更新的平台上無法使用。

只有在同時符合下列兩項政策條件時,才能降級:

  1. pinned_version 已設為有效的舊版本。
  2. allow_downgrades 已明確設為 true。

降級方案的運作方式

  • 觸發機制:復原作業會在定期更新檢查週期 (每 4 到 6 小時執行一次) 期間處理。
  • 幕後運作:Chrome 會使用更新資訊清單中指定的舊版網頁軟體包 (.swbn),完整重新安裝 IWA。

版本轉換邏輯

透過政策切換應用程式的指定頻道時,更新引擎會遵循特定行為:

Scenario A: Switching to a channel with earlier versions

  • 如果允許降級:如果 pinned_version 與目標版本上的舊版本相符,且 allow_downgrades 為 true,系統就會復原 (並抹除本機使用者資料)。
  • 如果不允許降級:系統不會降級,裝置會維持目前安裝的較新版本,只有在新選取的頻道推出更新版本時,才會進行更新。

情境 B:切換至版本相同的頻道

  • 不變更:如果新選取的版本與目前安裝的版本相同,Chrome 就不會修改已安裝的套件。
  • 逐位元組身分原則:開發人員必須保證,不同管道中的相同版本號碼,包含相同的位元組比對程式碼簽章。在不同管道中,以相同版本字串部署不同的程式碼集,可能會導致應用程式狀態不穩定,出現非預期的情況。

管理政策設定

企業版本管控功能是透過集中式 Google 管理控制台平台,使用 IsolatedWebAppInstallForceList 政策結構定義強制執行。您可以直接透過管理控制台中的 UI 控制項管理這些設定,也可以使用原始 JSON 政策設定部署。
以下管理政策設定範例說明更新管道、版本固定和降級:

政策值表示法

[
  {
    "update_manifest_url": "https://awesome-kitchen-sink.glitch.me/update.json",
    "web_bundle_id": "aiv4bxauvcu3zvbu6r5yynoh4atkzqqaoeof5mwz54b4zfywcrjuoaacai",
    "channel": "beta",
    "pinned_version": "0.7.0",
    "allow_downgrades": true
  }
]

結構定義參數說明

  • channel (字串,選用):指示 Chrome 僅評估更新資訊清單中指派給這個管道的版本。如省略,Chrome 會評估「default」版本。
  • pinned_version (字串,選用):明確將裝置鎖定為指定版本字串。後續的自動背景更新會遭到封鎖。
  • allow_downgrades (布林值,選用):啟用復原功能。如果設為 True,且與有效的舊版 pinned_version 配對,Chrome 就會觸發降級重新安裝。警告:如果將這項參數設為 true,即使省略 pinned_version 欄位,系統也會封鎖所有標準轉寄更新。

非受管 (使用者安裝) IWA (150 起)

對於使用者自行安裝、不受管理的隔離網頁應用程式,版本管理需要使用者手動操作:

安裝套件 ──► 使用者選取管道 ──► 自動檢查所選管道

自動更新的資訊清單必要條件

如要讓使用者安裝的 IWA 在背景檢查並接收自動定期更新,應用程式的本機網頁應用程式資訊清單 (封裝在 /.well-known/manifest.webmanifest 內的中繼資料) 必須包含有效的 update_manifest_url 欄位。

如果應用程式的本機資訊清單檔案省略這個網址,非受管更新引擎就不會執行背景檢查,應用程式也會永久停留在初始安裝版本。

手動選擇管道

初次安裝未受管理的 IWA 時,瀏覽器會檢查更新資訊清單,如果開發人員設定了多個管道,則會直接向使用者顯示可用的管道選項 (例如「穩定版」、「Beta 版」)。

金鑰生命週期規則

  1. 首次安裝來源:無論使用者在安裝時選取哪個管道,初始安裝一律會部署所提供安裝套件中封裝的檔案。
  2. 後續更新:安裝後,系統只會從所選管道查詢日後的更新。只有在目標管道發布高於安裝版本的版本時,應用程式才會更新。
  3. 切換版本:如要在安裝後切換至其他更新版本,使用者必須解除安裝 IWA 並重新安裝,然後在安裝流程中選擇所需版本。

如何測試代管部署作業

管理員透過 Chrome Enterprise 管理控制台管理裝置,或直接設定政策:

  1. 前往機構設定下方的「應用程式詳細資料」面板。
  2. 套用設定屬性,測試固定和管道目標。這些控制項與標準使用者工作階段、受管理訪客工作階段 (MGS) 和 Kiosk 完全相容,因此您可以驗證所有目標部署環境中的行為。
  3. 如要在本機檢查更新,請在測試用戶端上前往 chrome://web-app-internals,手動強制檢查更新,並分析傳入的資訊清單封包。

結論

隔離網頁應用程式的安全架構旨在賦予開發人員權力,同時嚴格控管應用程式生命週期行為,並確保其可預測性。開發人員和 IT 管理員可以利用 Chrome 的版本管理功能,建構符合嚴格法規遵循標準和營運目標的健全部署管道。

設計及管理應用程式更新策略時,請謹記下列核心原則:

  • 使用漸進式頻道:更新頻道 (例如 beta、dev 或自訂更新環) 可讓您逐步收集遙測資料和意見回饋。這可確保重大更新在預設管道上向一般使用者發布前,經過嚴格驗證。
  • 固定版本以確保穩定性:在高度結構化或法規遵循導向的企業環境中,請將重要端點鎖定在經過驗證的確切 pinned_version,避免作業意外中斷或工作流程中斷。
  • 保留降級功能以備不時之需:請注意,版本降級是一項強大的修正安全閥,在過去是不可能實現的。不過,復原作業會觸發完整重新安裝程序,並清除所有本機用戶端儲存空間 (IndexedDB、LocalStorage、Cookie),因此應嚴格保留用於重大安全性修復。對於一般修補程式,部署前瞻性的小型更新一向是理想策略。
  • 瞭解政策旗標:請留意管理切換鈕;開啟 allow_downgrades 會停止所有後續更新,即使未主動定義固定版本也一樣。
  • 建立逐位元組完整性:確保部署在不同管道的相同版本號碼,對應至位元組相符的相同套件,避免用戶端在管道之間轉換時,應用程式狀態不穩定。

只要將這些功能直接整合至更新資訊清單和企業政策架構,即可確保更新流程可靠、可稽核且安全,維持隔離網頁應用程式生態系統的高信任保證。