Eksperymenty progresywne z flagami funkcji

Gdy zespoły DevOps przejdą do metodologii Agile, która koncentruje się na ciągłym dostarczaniu funkcji, potrzeba kontrolowania ujawniania nowych funkcji staje się coraz ważniejsza. Bez względu na to, czy celem jest ograniczenie dostępu do tych nowych funkcji w celach marketingowych, czy ograniczenie odbiorców do testowania w środowisku produkcyjnym,flagi funkcji są doskonałym rozwiązaniem.

Rozdzielenie wdrażania i narażenia

Flagi funkcji to ustawienia, które zespół może zdefiniować, które wskazują, czy dany zestaw funkcji jest widoczny w interfejsie użytkownika i/lub wywoływany w ramach funkcji. Dzięki temu zespół może tworzyć i wdrażać te funkcje w ramach zwykłego procesu tworzenia oprogramowania, ale aby uniknąć konieczności uzyskania dostępu do tych funkcji w szerokim zakresie. Oferują one wygodny sposób oddzielenia wdrażania funkcji od ich narażenia.

Flagi zapewniają kontrolę środowiska uruchomieniowego dla poszczególnych użytkowników

Flagi zapewniają również szczegółową kontrolę aż do poszczególnych użytkowników. Gdy na czas włączysz funkcję , zarówno dla jednego użytkownika, małej grupy, jak i dla każdego, zespół może po prostu zmienić flagę funkcji, aby ją włączyć bez konieczności ponownego wdychowania.

Zakres flagi funkcji zależy od charakteru funkcji i odbiorców. W niektórych przypadkach flaga funkcji automatycznie przerzuci funkcję dla wszystkich użytkowników. W innych przypadkach funkcja zostanie włączona dla użytkownika. Zespoły mogą również zdecydować się na użycie flag funkcji, aby włączyć opcję włączania funkcji przez użytkowników, jeśli tego chcą. Tak naprawdę nie ma żadnego ograniczenia sposobu implementowanie flag funkcji.

Obsługa wczesnej opinii, eksperymentowania

Flagi funkcji to doskonały sposób na obsługę wczesnych eksperymentów. Niektóre cechy mogą mieć wczesne krawędzie, które mogą być interesujące tylko dla najwcześniejszych adoptatorów. Próba wypchnięć tych nie do końca gotowych funkcji do szerszego grona odbiorców może być niezadowolony z produktu. Jednak zbieranie opinii od osób, które chcą korzystać z funkcji w toku, jest bezcenne.

Przełącznik szybkiego wyłączenia

Czasami bardzo przydatne jest, aby można było coś wyłączyć. Załóżmy na przykład, że nowa funkcja nie działa w zamierzony sposób i istnieją efekty uboczne, które powodują problemy w innym miejscu. Flagi funkcji to doskonały sposób na szybkie wyłączenie nowych funkcji w celu powrotu do zaufanego zachowania bez konieczności ponownego lodowania. Flagi funkcji są często myśli się o funkcjach interfejsu użytkownika, ale równie łatwo można ich używać do zmian w architekturze lub infrastrukturze.

Etapy standardowe

Istnieje standardowy proces, za pomocą których firma Microsoft włącza flagi funkcji. Istnieją dwa oddzielne pojęcia: pierścienie są dla wdrożeń, a etapy są dla flag funkcji. Dowiedz się więcej o pierścieniach i etapach.

Wszystkie etapy to ujawnienie lub ujawnienie. Na przykład pierwszy etap może być dla konta zespołu i osobistych kont członków. W tej chwili prawdopodobnie w usłudze działa wiele rzeczy, których użytkownicy nie zobaczą, ponieważ flagi miejsca są włączone tylko na tym pierwszym etapie. Dzięki temu zespół może w pełni korzystać z niego i eksperymentować z nim. Po zakończeniu pracy zespołu wybierz pozycję Klienci będą mogli wybrać tę opcję za pośrednictwem drugiego etapu flag funkcji.

Zrezygnuj

Dobrym rozwiązaniem jest umożliwienie użytkownikom korzystania z flag funkcji, gdy jest to możliwe. Na przykład zespół może uwidocznić panel podglądu skojarzony z preferencjami lub ustawieniami użytkownika.

Okienko Zgody na podgląd

Używanie flag z telemetrią

Dzięki flagom funkcji zespoły mogą przyrostowo ujawniać aktualizacje. Jednak aby w pełni ocenić gotowość do szerszego narażenia, zespoły muszą stale monitorować odpowiednie metryki. Te metryki powinny obejmować zachowanie użycia, a także wpływ aktualizacji na kondycję systemu. Ważne jest, aby uniknąć pułapki przy założeniu, że wszystko jest w porządku, tylko dlatego, że nic złego się nie dzieje.

Przykład flagi funkcji

Rozważmy poniższy przykład. Zespół dodał w tym miejscu kilka przycisków dla opcji Wybór wysuwu i Przywróć w interfejsie użytkownika żądania ściągnnięcia. Zostały one wdrożone przy użyciu flag funkcji.

Przykład interfejsu użytkownika żądania ściągnnięcia

Definiowanie flag funkcji

Pierwszą ujawnioną funkcją był przycisk Przywróć. W przypadku tego produktu rozwiązanie używa pliku XML do zdefiniowania wszystkich flag funkcji. W tym przypadku istnieje jeden plik na usługę. Dzięki temu, jeśli zespół skończy się naprawdę długo w swojej sekcji, nie ma wątpliwości, że czas na ich wyczyszczenie. Spowoduje to usunięcie starych flag, ponieważ istnieje naturalna motywacja do kontrolowania rozmiaru tego pliku.

<?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" />

Posiadanie wspólnej struktury serwera sprawia, że wiele ponownego użycia i korzyści skali w całym zespole. W idealnym przypadku projekt będzie miał infrastrukturę, dzięki czemu deweloper może po prostu zdefiniować flagę w magazynie centralnym i obsługiwać pozostałą część infrastruktury.

Sprawdzanie flag funkcji w czasie wykonywania

Flaga funkcji używana w tym miejscu nosi nazwę SourceControl.Revert. Oto rzeczywisty kod Typescript z tej strony, który ilustruje wywołanie sprawdzania dostępności funkcji.

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>
        );
     }
}

Powyższy przykład ilustruje użycie w języku TypeScript, ale równie łatwo można uzyskać do niego dostęp z języka C#. Kod sprawdza, czy funkcja jest włączona, a jeśli tak, renderuje przycisk w celu zapewnienia funkcjonalności. Jeśli flaga nie jest włączona, przycisk zostanie pominięty.

Kontrolowanie flagi funkcji

Dobra platforma flagi funkcji zapewnia wiele sposobów zarządzania tym, czy ustawiono danej flagi. Zazwyczaj istnieją scenariusze użycia dla flagi, które mają być kontrolowane za pośrednictwem programu PowerShell i interfejsu internetowego. W przypadku programu PowerShell wszystko, co naprawdę musi zostać ujawnione, to sposoby uzyskania i ustawienia stanu flagi funkcji wraz z opcjonalnymi parametrami dla takich rzeczy jak identyfikatory konta użytkownika (jeśli ma to zastosowanie).

Kontrolowanie flag funkcji za pomocą internetowego interfejsu użytkownika

Poniżej znajduje się przykład użycia internetowego interfejsu użytkownika widocznego dla tego produktu przez zespół. Zanotuj flagę funkcji dla sourcecontrol.revert. W tym miejscu wymieniono dwa konta osobiste: hallux iorth-west west pomieści. Stan jest ustawiony dla stanu hallux, który występuje w północno-środkowej części i jest wyczyszowany dla drugiego konta w Europie Zachodniej.

Kontrolowanie flag funkcji za pomocą internetowego interfejsu użytkownika

Charakter flagi funkcji będzie miał na celu sposób, w jaki funkcje są udostępniane. W niektórych przypadkach narażenie będzie zgodne z modelem pierścieniowym i etapowym. W innych użytkownicy mogą wyrazić zgodę za pośrednictwem interfejsu użytkownika konfiguracji, a nawet przez wysyłanie wiadomości e-mail do zespołu w celu uzyskania dostępu.

Zagadnienia dotyczące flag funkcji

Większość flag funkcji można wycofać po wdrożnych funkcjach dla wszystkich użytkowników. W tym momencie zespół może usunąć wszystkie odwołania do flagi w kodzie i konfiguracji. Dobrym rozwiązaniem jest dołączowanie przeglądu flagi funkcji, na przykład na początku każdego przebiegu.

W tym samym czasie może być zestaw flag funkcji, które są trwałe z różnych powodów. Na przykład zespół może chcieć zachować flagę funkcji, która rozgałęzienia infrastruktury przez okres po pełnym przełączeniu usługi produkcyjnej. Należy jednak pamiętać, że ta potencjalna ścieżka kodu może zostać ponownie aktywowana w przyszłości podczas jawnego czyszczenia flagi funkcji, dlatego należy ją przetestować i zachować do momentu usunięcia opcji.

Flagi funkcji i strategia rozgałęzienia

Flagi funkcji umożliwiają zespołom programistów uwzględnianie niekompletnych funkcji w main programie bez wpływu na kogoś innego. Tak długo, jak ścieżka kodu jest odizolowana za flagą funkcji, na ogół można bezpiecznie skompilować i opublikować ten kod bez skutków ubocznych wywłaszczających normalne użycie. Jeśli jednak istnieją przypadki, w których funkcja wymaga zależności, na przykład podczas uwłaczania punktu końcowego REST, zespoły muszą pamiętać o tym, jak te zależności mogą tworzyć zabezpieczenia lub konserwację nawet bez ujawniania funkcji.

Flagi funkcji w celu ograniczenia ryzyka

Czasami nowe funkcje mogą wprowadzać destrukcyjne lub zakłócające zmiany. Na przykład produkt może przechodzić transformację z szerokiego schematu bazy danych do długiego. W tym scenariuszu deweloper powinien utworzyć gałąź funkcji przez niewielki czas. Następnie wprowadzają zmiany destabilizacji w gałęzi i przechowują funkcję za flagą. Popularną praktyką jest to, że zespoły mogą następnie scalać zmiany tak szybko, jak nie main powodują żadnych szkód. Nie byłoby to możliwe bez możliwości zachowania niedokończonej funkcji ukrytej za flagą funkcji.

Flagi funkcji ułatwiają pracę w głównej

Praca w programie to dobry sposób na zaostrzenie cyklu DevOps, pod warunkiem, że jest on zgodny ze wspólnymi rozwiązaniami omówionymi w main fazie opracowywania. W połączeniu z flagami funkcji deweloperzy mogą szybko scalić swoje funkcje nadrzędne i wypychać je przez testowe wyzwanie. Dzięki temu kod wysokiej jakości jest szybko publikowany w celu testowania w środowisku produkcyjnym. Po kilku przebiegach deweloperzy szybko rozpoznają korzyści wynikające z używania flag funkcji i aktywnego korzystania z nich.

Jak zdecydować, czy używać flagi funkcji

Zespoły funkcji są właścicielami decyzji, czy potrzebują flagi funkcji dla danej zmiany. Nie każda zmiana wymaga jednej zmiany, więc jest to wezwanie do oceny dla dewelopera, gdy wybierze opcję zmiany. W przypadku funkcji przywracania omówionej wcześniej ważne było użycie flagi funkcji, ponieważ oznaczało to, że zespół może umieścić tę funkcję w środowisku produkcyjnym z kontrolowanym naświetlidaniem. Umożliwienie zespołom podejmowania kluczowych decyzji dotyczących ich obszaru funkcji jest częścią umożliwienia autonomii w efektywnej organizacji DevOps.

Kompilowanie a kupowanie

Chociaż każdy zespół ma możliwość tworzenia własnej infrastruktury flagi funkcji, zwykle zaleca się, aby w miarę możliwości adoptować platformę, np. LaunchDarkly. Lepiej jest zainwestować w tworzenie funkcji zamiast odbudowywania funkcji flagi funkcji.

Następne kroki

Dowiedz się więcej o używaniu flag funkcji w ASP.NET Core.