Progresivní experimentování s příznaky funkcí

Vzhledem k tomu, že týmy DevOps přejdou na agilní metodologii, která se zaměřuje na průběžné doručování funkcí, je potřeba řídit, jak budou uživatelé stále důležitější. Příznaky funkcí představují skvělé řešení pro omezení přístupu uživatelů k novým funkcím, a to buď pro marketingové účely, nebo pro testování v produkčním prostředí.

Oddělení nasazení a vystavení

Díky příznakům funkcí může tým zvolit, jestli je daná sada funkcí viditelná v uživatelském prostředí nebo vyvolána v rámci této funkce. Nové funkce je možné sestavit a nasadit jako součást běžného procesu vývoje, aniž by byly tyto funkce dostupné pro široký přístup. Nasazení funkcí je pohodlně odděleno od jejich expozice.

Příznaky poskytují řízení za běhu až k jednotlivým uživatelům.

Příznaky také poskytují podrobné řízení až po jednotlivého uživatele. Když je čas povolit funkci, ať už pro jednoho uživatele, malou skupinu nebo všechny, tým může příznak funkce jednoduše změnit, aby se rozsvítí, aniž by bylo nutné ji znovu nasadit.

Rozsah příznaku funkce se bude lišit v závislosti na povaze funkce a cílové skupině. V některých případech příznak funkce automaticky povolí funkci pro všechny uživatele. V jiných případech bude funkce povolena pro uživatele po uživatelích. Týmy můžou také používat příznaky funkcí, aby se uživatelé mohli přihlásit k povolení funkce, pokud tak chtějí. Ve skutečnosti neexistuje žádný limit způsobu implementace příznaků funkcí.

Podpora včasné zpětné vazby a experimentování

Příznaky funkcí představují skvělý způsob, jak podporovat dřívější experimentování. Některé funkce mohou mít drsné hrany na začátku, což může být zajímavé pouze pro nejstarší uživatele. Pokus o nasdílení nespokojených funkcí na širší cílovou skupinu by mohl vést k nespokojení. Výhodou shromažďování zpětné vazby od uživatelů, kteří jsou ochotni řešit probíhající funkci, je ale neocenitelná.

Rychlý přepínač vypnutí

Někdy je užitečné něco vypnout. Předpokládejme například, že nová funkce nefunguje tak, jak byla zamýšlena, a existují vedlejší účinky, které jinde způsobují problémy. Příznaky funkcí můžete použít k rychlému vypnutí nové funkce, abyste se mohli vrátit k důvěryhodnému chování bez nutnosti opětovného nasazení. Příznaky funkcí se často považují za funkce uživatelského rozhraní, ale dají se také snadno použít ke změnám v architektuře nebo infrastruktuře.

Standardní fáze

Microsoft používá k zapnutí příznaků funkcí standardní proces zavedení. Existují dva samostatné koncepty: okruhy jsou určené pro nasazení a fáze jsou určené pro příznaky funkcí. Přečtěte si další informace o okruhech a fázích.

Fáze se týkají zpřístupnění nebo vystavení. První fáze může být například pro účet týmu a osobní účty členů. Většinauživatelůch zařízení neuvidí nic nového, protože v této první fázi jsou zapnuté jenom příznaky místa. Díky tomu může tým plně používat a experimentovat s ním. Jakmile se tým odhlásí, můžou se k němu zákazníci přihlásit prostřednictvím druhé fáze příznaků funkcí.

Přihlásit se

Doporučujeme uživatelům povolit, aby se v případech, kdy je to možné, přihlásili k příznakům funkcí. Tým může například zveřejnit panel náhledu přidružený k předvolbě nebo nastavení uživatele.

Screenshot of opt-in preview pane.

Použití příznaků s telemetrií

Příznaky funkcí poskytují způsob, jak přírůstkově zveřejnit aktualizace. Týmy ale musí nepřetržitě monitorovat správné metriky, aby se měřily připravenost na širší expozici. Tyto metriky by měly zahrnovat chování využití a také dopad aktualizací na stav systému. Je důležité se vyhnout pasti za předpokladu, že všechno je v pořádku jen proto, že se zdá, že se nic špatného nestane.

Příklad příznaku funkce

Podívejte se na následující příklad. Tým zde přidal několik tlačítek pro výběr cherry a vrátit se do uživatelského rozhraní žádosti o přijetí změn. Ty byly nasazeny pomocí příznaků funkcí.

Screenshot of pull request UI example.

Definování příznaků funkcí

První zpřístupněná funkce byla tlačítko Vrátit zpět . Řešení používá soubor XML k definování všech příznaků funkce. V tomto případě existuje jeden soubor pro každou službu, který vytvoří pobídku k odebrání starých příznaků, aby oddíl nemohl být opravdu dlouhý. Tým odstraní staré příznaky, protože existuje přirozená motivace k řízení velikosti tohoto souboru.

<?xml version="1.0" encoding="utf-8"?>
<!--
  In this group we should register Azure DevOps specific features and sets their states.
-->
<ServicingStepGroup name="AzureDevOpsFeatureAvailability" … >
  <Steps>
    <!-- Feature Availability -->
    <ServicingStep name="Register features" stepPerformer="FeatureAvailability" … >
      <StepData>
        <!--specifying owner to allow implicit removal of features -->
        <Features owner="AzureDevOps">
           <!-- Begin TFVC/Git -->
           <Feature name="SourceControl.Revert" description="Source control revert features" />

Společná serverová architektura podporuje opakované použití a úspory z rozsahu napříč celým týmem. V ideálním případě bude mít projekt infrastrukturu, aby vývojář mohl jednoduše definovat příznak v centrálním úložišti a zbytek infrastruktury pro ně zpracovávat.

Kontrola příznaků funkcí za běhu

Příznak funkce použitý zde má název SourceControl.Revert. Tady je skutečný TypeScript z této stránky, který znázorňuje volání kontroly dostupnosti funkcí.

private addRevertButton(): void {
 if (FeatureAvailability.isFeatureEnabled(Flags.SourceControlRevert)) {
     this._calloutButtons.unshift(
         <button onClick={ () => Dialogs.revertPullRequest(
             this.props.repositoryContext,
             this.props.pullRequest.pullRequestContract(),
             this.props.pullRequest.branchStatusContract().sourceBranchStatus,
             this.props.pullRequest.branchStatusContract().targetBranchStatus)
         }
         >
             {VCResources.PullRequest_Revert_Button}
         </button>
        );
     }
}

Výše uvedený příklad ukazuje použití v TypeScriptu, ale stejně snadno se k němu dá přistupovat pomocí jazyka C#. Kód zkontroluje, jestli je funkce povolená, a pokud ano, vykreslí tlačítko pro poskytnutí funkce. Pokud příznak není povolený, tlačítko se přeskočí.

Řízení příznaku funkce

Dobrá platforma příznaku funkcí poskytuje několik způsobů, jak spravovat, jestli je daný příznak nastavený. Obvykle existují scénáře použití příznaku, který se má řídit pomocí PowerShellu a webového rozhraní. U PowerShellu jsou všechny, které skutečně potřeba zpřístupnit, způsoby, jak získat a nastavit stav příznaku funkce, spolu s volitelnými parametry pro konkrétní identifikátory uživatelských účtů, pokud je to možné.

Řízení příznaků funkcí prostřednictvím webového uživatelského rozhraní

Následující příklad používá webové uživatelské rozhraní zveřejněné pro tento produkt týmem. Poznamenejte si příznak funkce pro SourceControl.Revert. Tady jsou dva osobní účty: hallux a buckh-westeur. Stav je nastavený pro hallux, který se stane v oblasti Severní středosever, a vymazal se pro druhý účet v Západní Evropě.

Screenshot of controlling feature flags through web UI.

Povaha příznaku funkce bude řídit způsob, jakým jsou funkce vystaveny. V některých případech bude expozice následovat kruhový a fázový model. V jiných uživatelích se může přihlásit prostřednictvím konfiguračního uživatelského rozhraní nebo dokonce e-mailem týmu, aby mohl získat přístup.

Důležité informace o příznakech funkcí

Většinu příznaků funkcí je možné vyřadit, jakmile se funkce nasadí všem. V tomto okamžiku může tým odstranit všechny odkazy na příznak v kódu a konfiguraci. Osvědčeným postupem je zahrnout kontrolu příznaku funkce, například na začátku každého sprintu.

Současně může existovat sada příznaků funkcí, které se uchovávají z různých důvodů. Například tým může chtít zachovat příznak funkce, který po určitou dobu po úplném přepnutí produkční služby rozdělí něco do infrastruktury. Mějte ale na paměti, že tato potenciální cesta ke kódu se může v budoucnu znovu aktivovat během explicitního vymazání příznaku funkce, takže je potřeba ji otestovat a udržovat, dokud se tato možnost neodebere.

Strategie označování funkcí a větvení

Příznaky funkcí umožňují vývojových týmům zahrnout neúplné funkce main , aniž by to ovlivnilo někoho jiného. Pokud je cesta ke kódu izolovaná za příznakem funkce, je obecně bezpečné tento kód sestavit a publikovat bez vedlejších účinků, které mají vliv na normální použití. Pokud ale existují případy, kdy funkce vyžaduje závislosti, například při zveřejnění koncového bodu REST, týmy musí zvážit, jak tyto závislosti mohou vytvářet zabezpečení nebo údržbu i bez zpřístupnění funkce.

Příznaky funkcí pro zmírnění rizika

Někdy mají nové funkce potenciál zavést destruktivní nebo rušivé změny. Produkt může například projít transformací ze schématu široké databáze na dlouhou. V tomto scénáři by měl vývojář vytvořit větev funkcí po malou dobu. Potom ve větvi provede změny na aktivaci a funkce se za příznakem zachovají. Oblíbeným postupem je, aby týmy pak sloučily změny až main po tom, co nezpůsobují žádné škody. To by nebylo možné bez možnosti zachovat nedokončenou funkci skrytou za příznakem funkce.

Příznaky funkcí pomáhají pracovat v hlavní části

Pokud postupujete podle osvědčených postupů probíraných ve fázi vývoje , main je práce dobrým způsobem, jak utáhnout cyklus DevOps. V kombinaci s příznaky funkcí můžou vývojáři rychle sloučit funkce z upstreamu a nasdílat je testovací gauntletem. Kód kvality se může rychle publikovat pro testování v produkčním prostředí. Po několika sprintech vývojáři rozpoznávají výhody příznaků funkcí a aktivně je používají.

Jak se rozhodnout, jestli se má příznak funkce používat

Týmy funkcí vlastní rozhodnutí, jestli pro danou změnu potřebují příznak funkce nebo ne. Ne každá změna vyžaduje jednu, takže je to rozhodnutí pro vývojáře, když zvolí danou změnu. V případě funkce Vrácení zpět probírané dříve bylo důležité použít příznak funkce k řízení expozice. Povolení vlastních klíčových rozhodnutí o oblasti funkcí týmům je součástí umožnění autonomii v efektivní organizaci DevOps.

Build vs. buy

I když je možné vytvořit vlastní infrastrukturu příznaků funkcí, obecně se doporučuje přijetí platformy, jako je LaunchDarkly nebo Split . Raději investovat do sestavování funkcí místo opětovného sestavení funkcí příznaku.

Další kroky

Přečtěte si další informace o používání příznaků funkcí v aplikaci ASP.NET Core.