مدیریت نسخه

ماگدالنا اسکاربینسکا
Magdalena Skarbińska
دمیان رنزولی
Demián Renzulli

برنامه‌های وب ایزوله (IWA) یک محیط زمان اجرای با اعتماد بالا، امن و بدون وابستگی به نسخه را بر روی پلتفرم وب ارائه می‌دهند. در محیط‌های عملیاتی - به ویژه در شرکت‌های مدیریت‌شده - مدیران و توسعه‌دهندگان به کنترل دقیق بر استقرار نرم‌افزار نیاز دارند.

برای برآورده کردن این الزامات، کروم قابلیت‌های جامع مدیریت نسخه را برای IWAها، از جمله کانال‌های به‌روزرسانی ، پین کردن نسخه و کاهش نسخه ، ارائه می‌دهد. این ویژگی‌ها، پیش‌بینی‌پذیری استقرار و کنترل‌های بازیابی سریع را در سراسر پایگاه کاربری شما امکان‌پذیر می‌کنند.

در دسترس بودن

رفتار مدیریت نسخه بستگی به این دارد که آیا IWA توسط یک مدیر مدیریت می‌شود یا مستقیماً توسط یک کاربر نصب می‌شود:

  • رابط‌های کاربری مدیریت‌شده: ویژگی‌های مدیریتی (از جمله پین ​​کردن و تنزل رتبه بر اساس سیاست) از کروم ۱۳۳ در دسترس هستند.
  • رابط‌های برنامه کاربردی مدیریت نشده (نصب شده توسط کاربر): ویژگی‌های کاربرپسند (مانند انتخاب دستی کانال) از کروم ۱۵۰ در دسترس هستند.

سازگاری نوع جلسه

تمام قابلیت‌های مدیریت نسخه - از جمله کانال‌های به‌روزرسانی و پین کردن نسخه - کاملاً با انواع جلسات ChromeOS سازگار هستند. این شامل موارد زیر است:

  • جلسات کاربری مدیریت‌شده استاندارد
  • جلسات مهمان مدیریت‌شده (MGS)
  • محیط‌های حالت کیوسک اختصاصی

کانال‌ها را به‌روزرسانی کنید

با استفاده از کانال‌های به‌روزرسانی، توسعه‌دهندگان می‌توانند نسخه‌های خاص برنامه را برای مخاطبان استقرار و آزمایش متمایز، بخش‌بندی کنند. برای پیکربندی کانال‌ها، یک فیلد آرایه کانال‌های اختیاری به هر ورودی نسخه در مانیفست به‌روزرسانی برنامه اضافه کنید. این نام‌های کانال محدود به کلمات کلیدی ثابت پلتفرم (مانند canary یا stable ) نیستند، بلکه شناسه‌های دلخواه و تعریف‌شده توسط توسعه‌دهنده هستند که باید به صورت رشته‌های حروف الفبا ASCII با حروف کوچک قالب‌بندی شوند (که می‌توانند شامل خط تیره یا زیرخط باشند اما فاصله ندارند). اگر یک ورودی نسخه، فیلد کانال‌ها را به طور کامل حذف کند، کروم به طور ضمنی در دسترس بودن آن را به کانال "پیش‌فرض" پیش‌فرض می‌کند. در نهایت، نام کانال تعیین‌شده در خط‌مشی اداری باید دقیقاً با رشته تعریف‌شده در مانیفست مطابقت داشته باشد. هرگونه خطای تایپی یا پیکربندی‌های نامتناسب منجر به شناسایی نشدن نسخه واجد شرایط می‌شود و در نتیجه به‌روزرسانی‌ها برای آن دسته از کلاینت‌ها متوقف می‌شود.

پیکربندی مانیفست

برای پیکربندی کانال‌ها، یک آرایه اختیاری channels به هر ورودی نسخه در مانیفست برنامه وب خود اضافه کنید. در اینجا چند نکته وجود دارد که باید در نظر بگیرید:

  • نگاشت کانال: اگر یک ورودی نسخه، آرایه‌ای channels را تعریف کند، آن نسخه فقط برای نصب روی کانال‌های مشخص‌شده واجد شرایط است.
  • جایگزین پیش‌فرض: اگر فیلد channels در ورودی نسخه به طور کامل حذف شود، کروم فرض می‌کند که نسخه منحصراً متعلق به کانال 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"
    }
  ]
}

بر اساس این مانیفست، نسخه‌های زیر برای هر کانال هدف در دسترس هستند:

  • پیش‌فرض: 0.2.0 ، 0.4.0 (که فاقد کانال صریح است و پیش‌فرض آن روی پیش‌فرض است)
  • دلتا: 0.1.0 ، 0.2.0 ، 0.3.0
  • بتا: 0.3.0

موتور به‌روزرسانی IWA با جستجوی فیلد کانال‌ها در داخل Update Manifest برنامه، از هدف قرار دادن کانال‌های انتشار خاص پشتیبانی می‌کند.

پین کردن نسخه

در محیط‌های سازمانی با انطباق بالا یا بسیار پایدار، مدیران باید اطمینان حاصل کنند که دستگاه‌ها نسخه‌های دقیقی از نرم‌افزارهای حیاتی کسب‌وکار را اجرا می‌کنند. پین کردن نسخه به مدیران اجازه می‌دهد تا یک IWA را به یک نسخه خاص قفل کنند و تمام به‌روزرسانی‌های پس زمینه بعدی را متوقف کنند. این امر روشی بسیار قابل اعتماد برای حفظ پیکربندی‌های پایدار و رعایت مقررات سختگیرانه داخلی یا صنعتی در اختیار شرکت‌ها قرار می‌دهد.

برای فریز کردن یک برنامه وب ایزوله (IWA) در یک نسخه خاص، مدیران سازمان می‌توانند ویژگی pinned_version را در خط‌مشی IsolatedWebAppInstallForceList پیکربندی کنند. این قابلیت در درجه اول از طریق کنترل‌های رابط کاربری تعاملی در کنسول مدیریت گوگل در زیر پنل جزئیات برنامه و پس از گردش کار نصب استاندارد IWA مدیریت می‌شود، اگرچه مدیران همچنین انعطاف‌پذیری لازم برای استقرار مستقیم این مقادیر خط‌مشی با استفاده از پیکربندی‌های خام JSON را حفظ می‌کنند. هنگامی که یک رشته نسخه معتبر با موفقیت توسط مدیر هدف قرار گرفت، کروم آن بسته صریح را دریافت کرده و تمام به‌روزرسانی‌های خودکار رو به جلوی بعدی را مسدود می‌کند.

رفتارها و محدودیت‌های خاص

  • از سرگیری به‌روزرسانی‌ها (Unpinning): برای بازیابی به‌روزرسانی‌های خودکار، ویژگی pinned_version را حذف کنید یا مقدار آن را به نسخه هدف جدیدتری تغییر دهید.
  • عدم تنزل نسخه به نسخه پایین‌تر به صورت پیش‌فرض: تنظیم pinned_version روی نسخه‌ای پایین‌تر از نسخه نصب‌شده فعلی، باعث بازگشت به نسخه قبلی نمی‌شود، مگر اینکه allow_downgrades صراحتاً فعال شده باشد.
  • اهداف پین در دسترس نیستند: اگر pinned_version پیکربندی‌شده در کانال به‌روزرسانی تعیین‌شده وجود نداشته باشد، یا قدیمی‌تر از نسخه نصب‌شده باشد (با غیرفعال بودن قابلیت تنزل رتبه)، کروم نسخه نصب‌شده فعلی را حفظ کرده و هرگونه به‌روزرسانی بیشتر را مسدود می‌کند.
  • استقرارهای جدید: اگر IWA هنوز روی یک دستگاه مدیریت‌شده نصب نشده باشد، و pinned_version مشخص‌شده قابل بازیابی نباشد یا در مانیفست به‌روزرسانی وجود نداشته باشد، نصب IWA با شکست مواجه خواهد شد.

تنزل نسخه

اگر یک به‌روزرسانی تازه منتشر شده، یک اشکال یا آسیب‌پذیری بحرانی ایجاد کند، ممکن است مدیران سیستم نیاز داشته باشند که دستگاه‌ها را به حالت پایدار قبلی برگردانند. کروم از تنزل رتبه IWAهای مدیریت‌شده‌ی از قبل نصب‌شده به نسخه پایین‌تر پشتیبانی می‌کند - قابلیتی که قبلاً در پلتفرم، زمانی که فقط به‌روزرسانی‌های رو به جلو مجاز بودند، در دسترس نبود.

تنزل رتبه فقط در صورتی امکان‌پذیر است که هر دو شرط زیر در سیاست رعایت شده باشد:

  1. pinned_version روی یک نسخه معتبر و قدیمی‌تر تنظیم شده است.
  2. allow_downgrades به صراحت روی true تنظیم شده است.

نحوه‌ی عملکرد تنزل رتبه‌ها

  • مکانیسم فعال‌سازی: واگردانی‌ها در طول چرخه بررسی به‌روزرسانی منظم (که هر ۴ تا ۶ ساعت اجرا می‌شود) پردازش می‌شوند.
  • در پشت صحنه: کروم با استفاده از بسته وب قدیمی‌تر (.swbn) که در مانیفست به‌روزرسانی مشخص شده است، نصب مجدد کامل IWA را انجام می‌دهد.

منطق انتقال کانال

هنگام تغییر کانال هدف یک برنامه با یک خط‌مشی، موتور به‌روزرسانی از رفتارهای خاصی پیروی می‌کند:

سناریو الف: تغییر به کانالی با نسخه‌های قبلی

  • اگر تنزل رتبه مجاز باشد: اگر pinned_version با نسخه قدیمی‌تر در کانال هدف مطابقت داشته باشد و allow_downgrades مقدار true داشته باشد، یک بازگشت به عقب رخ می‌دهد (و داده‌های کاربر محلی پاک می‌شوند).
  • اگر تنزل رتبه مجاز نباشد: هیچ تنزل رتبه‌ای رخ نخواهد داد. دستگاه روی نسخه بالاتر نصب شده فعلی خود باقی خواهد ماند و فقط زمانی به‌روزرسانی می‌شود که نسخه جدیدتری در کانال تازه انتخاب شده در دسترس قرار گیرد.

سناریوی ب: تغییر به کانالی با نسخه یکسان

  • بدون تغییر: اگر کانال تازه انتخاب شده به شماره نسخه‌ای برابر با شماره نسخه نصب شده فعلی اشاره کند، کروم هیچ تغییری در بسته نصب شده ایجاد نخواهد کرد.
  • اصل هویت بایت به بایت: توسعه‌دهندگان باید تضمین کنند که شماره نسخه‌های یکسان در کانال‌های مختلف، حاوی امضاهای کد یکسان و منطبق با بایت هستند. استقرار پایگاه‌های کد مختلف تحت یک رشته نسخه یکسان در کانال‌ها می‌تواند منجر به حالت‌های غیرمنتظره و نامنظم برنامه شود.

پیکربندی سیاست اداری

کنترل‌های نسخه سازمانی با استفاده از طرحواره سیاست IsolatedWebAppInstallForceList با پلتفرم متمرکز کنسول مدیریت گوگل اعمال می‌شوند. این تنظیمات را می‌توان مستقیماً از طریق کنترل‌های رابط کاربری در کنسول مدیریت مدیریت کرد یا با استفاده از پیکربندی‌های خام سیاست 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 (رشته‌ای، اختیاری) : به کروم دستور می‌دهد که فقط نسخه‌های اختصاص داده شده به این کانال را در مانیفست به‌روزرسانی ارزیابی کند. در صورت حذف، کروم کانال "پیش‌فرض" را ارزیابی می‌کند.
  • pinned_version (رشته، اختیاری) : دستگاه را به طور صریح روی رشته نسخه مشخص شده قفل می‌کند. به‌روزرسانی‌های خودکار بعدی در پس‌زمینه مسدود می‌شوند.
  • allow_downgrades (بولی، اختیاری) : قابلیت بازگشت به نسخه قبلی را فعال می‌کند. اگر مقدار آن درست باشد و با یک pinned_version معتبر و قدیمی‌تر جفت شود، کروم نصب مجدد نسخه قبلی را آغاز می‌کند. هشدار: تنظیم این پارامتر روی true، تمام به‌روزرسانی‌های استاندارد رو به جلو را مسدود می‌کند، حتی اگر فیلد pinned_version حذف شده باشد.

IWA های مدیریت نشده (نصب شده توسط کاربر) (از ۱۵۰)

برای برنامه‌های وب ایزوله مدیریت نشده و نصب شده توسط کاربر، نسخه‌بندی با تعاملات دستی کاربر انجام می‌شود:

بسته نصب ──► انتخاب کانال توسط کاربر ──► بررسی خودکار کانال انتخاب شده

پیش‌نیاز مانیفست برای به‌روزرسانی‌های خودکار

برای اینکه IWA های نصب شده توسط کاربر، به‌روزرسانی‌های دوره‌ای خودکار را در پس‌زمینه بررسی و دریافت کنند، باید مانیفست برنامه وب محلی برنامه (متادیتای موجود در بسته نرم‌افزاری در /.well-known/manifest.webmanifest ) حاوی یک فیلد معتبر update_manifest_url باشد.

اگر این URL از فایل مانیفست محلی برنامه حذف شود، موتور به‌روزرسانی مدیریت‌نشده هرگز بررسی‌های پس‌زمینه را انجام نمی‌دهد و برنامه برای همیشه در نسخه نصب اولیه خود ثابت می‌ماند.

انتخاب کانال دستی

در طول نصب اولیه یک IWA مدیریت نشده، مرورگر مانیفست به‌روزرسانی را بررسی می‌کند و در صورتی که توسعه‌دهنده چندین کانال را پیکربندی کرده باشد، گزینه‌های کانال موجود (مثلاً «پایدار»، «بتا») را مستقیماً به کاربر نمایش می‌دهد.

قوانین کلیدی چرخه حیات

  1. اولین مبدا نصب: صرف نظر از کانال انتخاب شده توسط کاربر در هنگام نصب، نصب اولیه همیشه فایل‌های موجود در بسته نصب ارائه شده را مستقر می‌کند.
  2. به‌روزرسانی‌های بعدی: پس از نصب، به‌روزرسانی‌های بعدی منحصراً از کانال انتخاب‌شده درخواست می‌شوند. برنامه فقط زمانی به‌روزرسانی می‌شود که نسخه‌ای بالاتر از نسخه نصب‌شده در آن کانال هدف منتشر شود.
  3. تغییر کانال‌ها: برای تغییر به یک کانال به‌روزرسانی متفاوت پس از نصب، کاربر باید IWA را حذف نصب کرده و دوباره آن را نصب کند و در طول فرآیند نصب، کانال انتخاب شده را انتخاب کند.

چگونه می‌توان استقرارهای مدیریت‌شده را آزمایش کرد؟

برای مدیرانی که دستگاه‌ها را از طریق کنسول مدیریت Chrome Enterprise مدیریت می‌کنند یا مستقیماً سیاست‌ها را پیکربندی می‌کنند:

  1. در تنظیمات سازمانی، به پنل جزئیات برنامه بروید.
  2. ویژگی‌های پیکربندی را برای آزمایش پین کردن و کانال کردن اهداف اعمال کنید. از آنجا که این کنترل‌ها کاملاً با جلسات استاندارد کاربر، جلسات مدیریت‌شده مهمان (MGS) و کیوسک‌ها سازگار هستند، می‌توانید رفتارها را در تمام محیط‌های استقرار هدف تأیید کنید.
  3. برای بررسی بررسی‌های به‌روزرسانی به صورت محلی، در یک کلاینت آزمایشی به chrome://web-app-internals بروید تا بررسی‌های به‌روزرسانی را به صورت دستی اعمال کرده و بسته‌های مانیفست ورودی را تجزیه و تحلیل کنید.

نتیجه‌گیری

معماری امنیتی برنامه‌های وب ایزوله به گونه‌ای طراحی شده است که ضمن حفظ پیش‌بینی‌پذیری و کنترل دقیق بر رفتارهای چرخه عمر برنامه، به توسعه‌دهندگان قدرت دهد. با بهره‌گیری از ویژگی‌های مدیریت نسخه کروم، هم توسعه‌دهندگان و هم مدیران فناوری اطلاعات می‌توانند خطوط لوله استقرار قوی ایجاد کنند که با استانداردهای انطباق دقیق و اهداف عملیاتی همسو باشد.

هنگام طراحی و مدیریت استراتژی به‌روزرسانی برنامه خود، این اصول اساسی را در نظر داشته باشید:

  • از کانال‌های پیشرفته استفاده کنید: کانال‌های به‌روزرسانی (مانند beta ، dev یا حلقه‌های سفارشی) به شما امکان می‌دهند تا به تدریج اطلاعات تله‌متری و بازخوردها را جمع‌آوری کنید. این امر تضمین می‌کند که به‌روزرسانی‌های اصلی قبل از انتشار عمومی در کانال پیش‌فرض، تحت تأیید دقیق قرار می‌گیرند.
  • پین برای پایداری: در محیط‌های سازمانی بسیار ساختاریافته یا مبتنی بر انطباق، نقاط پایانی حیاتی را به یک نسخه پین‌شده‌ی تأییدشده و دقیق قفل کنید تا عملیات از خرابی‌های غیرمنتظره یا اختلالات گردش کار محافظت شود.
  • ذخیره‌ی دانگرید برای موارد اضطراری: توجه داشته باشید که دانگرید نسخه، یک سوپاپ اطمینان قدرتمند و اصلاحی است که قبلاً غیرممکن بود. با این حال، از آنجا که یک رول‌بک باعث نصب مجدد کامل و پاک‌سازی تمام فضای ذخیره‌سازی کلاینت محلی (IndexedDB، LocalStorage، کوکی‌ها) می‌شود، باید صرفاً برای اصلاح امنیتی حیاتی ذخیره شود. برای وصله‌های معمولی، اعمال یک به‌روزرسانی جزئی آینده‌نگر همیشه استراتژی ایده‌آلی است.
  • پرچم‌های سیاست را بشناسید: مراقب سوئیچ‌های مدیریتی باشید؛ فعال کردن allow_downgrades تمام به‌روزرسانی‌های رو به جلو را متوقف می‌کند، حتی اگر پینی به طور فعال تعریف نشده باشد.
  • ایجاد یکپارچگی بایت به بایت: اطمینان حاصل کنید که شماره نسخه‌های یکسان مستقر در کانال‌های مختلف به بسته‌های یکسان و منطبق با بایت نگاشت می‌شوند تا از وضعیت‌های نامنظم برنامه هنگام انتقال کلاینت‌ها بین کانال‌ها جلوگیری شود.

با ادغام مستقیم این ویژگی‌ها در Update Manifest و طرحواره سیاست سازمانی خود، می‌توانید یک جریان به‌روزرسانی قابل اعتماد، قابل حسابرسی و ایمن را تضمین کنید که ضمانت‌های بالای اعتماد اکوسیستم Isolated Web App را حفظ می‌کند.