Udostępnij za pośrednictwem


Architektura bazowa CI/CD z Azure Pipelines

W tym artykule opisano ogólny przepływ pracy metodyki DevOps na potrzeby wdrażania zmian aplikacji w środowiskach przejściowych i produkcyjnych na platformie Azure. Rozwiązanie korzysta z praktyk ciągłej integracji/ciągłego wdrażania (CI/CD) w usłudze Azure Pipelines.

Ważny

W tym artykule opisano ogólną architekturę ciągłej integracji i wdrażania przy użyciu usługi Azure Pipelines. Nie jest przeznaczona do pokrycia specyfiki wdrażania w różnych środowiskach, takich jak usługi Azure App Services, Virtual Machines i Azure Power Platform. Szczegóły platformy wdrażania zostały omówione w oddzielnych artykułach.

Architektura

Diagram architektury pipeline'u CI/CD przy użyciu Azure Pipelines.

Pobierz plik Visio tego projektu.

Notatka

Chociaż w tym artykule opisano CI/CD dla zmian aplikacji, usługa Azure Pipelines może również służyć do tworzenia potoków CI/CD dla zmian w infrastrukturze jako kod (IaC).

Dataflow

Dane przepływają przez scenariusz w następujący sposób:

  1. Potok zadań PR — Pull request (PR) do Azure Repos Git wyzwala potok zadań PR. Ten pipeline przeprowadza szybkie kontrole jakości. Te kontrole powinny obejmować następujące elementy:

    • Tworzenie kodu, który wymaga ściągania zależności z systemu zarządzania zależnościami.
    • Korzystanie z narzędzi do analizowania kodu, takich jak analiza kodu statycznego, linting i skanowanie zabezpieczeń
    • Testy jednostkowe

    Jeśli którykolwiek z testów zakończy się niepowodzeniem, działanie potoku zostanie przerwane, a programista będzie musiał wprowadzić wymagane zmiany. Jeśli wszystkie sprawdzenia zostaną zaliczone, potok powinien wymagać przeglądu PR. Jeśli przegląd pull requestu zakończy się niepowodzeniem, potok zakończy się, a deweloper będzie musiał wprowadzić wymagane zmiany. Jeśli wszystkie kontrole i przeglądy żądań ściągnięcia przejdą pomyślnie, żądanie ściągnięcia zostanie pomyślnie scalone.

  2. Potok ciągłej integracji — Scalanie w Azure Repos Git wyzwala potok ciągłej integracji. Ten pipeline uruchamia te same kontrole co pipeline PR (żądanie ściągnięcia) z pewnymi ważnymi dodatkami. Pipeline CI uruchamia testy integracyjne. Testy integracyjne mogą być wymagające zasobowo, więc uruchamianie ich w potoku CI równoważy szybkość rozwoju i wykrywanie błędów. Ważne jest również, aby pamiętać, że uzyskiwanie pozytywnych wyników testów w pull request nie zawsze zapewnia powodzenie po scaleniu. Zmiany w gałęzi głównej mogą bowiem wprowadzać nowe problemy, co podkreśla potrzebę testowania po scaleniu. Te czynniki sprawiają, że potok CI jest lepszym miejscem do testów integracyjnych niż potok PR. Te testy integracji nie powinny wymagać wdrożenia rozwiązania, ponieważ artefakty kompilacji nie zostały jeszcze utworzone. Jeśli testy integracji wymagają tajemnic, potok pobiera je z usługi Azure Key Vault. Jeśli którykolwiek z testów zakończy się niepowodzeniem, pipeline zakończy się, a deweloper będzie musiał zaktualizować wymagane zmiany. Wynikiem pomyślnego uruchomienia tego potoku jest tworzenie i publikowanie artefaktów kompilacji.

  3. Potok CD - Publikacja artefaktów wyzwala potok CD.

  4. Wersja CD do środowiska testowego — Potok CD pobiera artefakty kompilacji utworzone w potoku CI i wdraża rozwiązanie w środowisku testowym. Następnie potok uruchamia testy akceptacyjne na środowisko tymczasowe, aby zweryfikować wdrożenie. Jeśli jakikolwiek test akceptacyjny zakończy się niepowodzeniem, proces zostanie przerwany, a deweloper będzie musiał wprowadzić wymagane zmiany. Jeśli testy zakończą się powodzeniem, można zaimplementować zadanie ręcznego sprawdzania poprawności, aby osoba lub grupa mogła zweryfikować wdrożenie i wznowić potok.

  5. wydanie CD do produkcji — jeśli ręczna interwencja zostanie wznowiona lub nie jest wdrożona, pipeline wydaje rozwiązanie do środowiska produkcyjnego. Pipelina powinna uruchamiać testy smoke w środowisku produkcyjnym, aby upewnić się, że wydanie działa zgodnie z oczekiwaniami. Jeśli krok interwencji ręcznej spowoduje anulowanie, wydanie zakończy się niepowodzeniem, lub testy dymne zawiodą, wydanie zostanie wycofane, potok się zakończy, a deweloper będzie musiał wprowadzić wymagane zmiany.

  6. monitorowanie — usługa Azure Monitor zbiera dane dotyczące obserwacji, takie jak dzienniki i metryki, dzięki czemu operator może analizować dane dotyczące kondycji, wydajności i użycia. Usługa Application Insights zbiera wszystkie dane monitorowania specyficzne dla aplikacji, takie jak ślady. Usługa Azure Log Analytics służy do przechowywania wszystkich tych danych.

Składniki

  • Repozytorium Azure Repos Git służy jako repozytorium kodu, które zapewnia kontrolę wersji i platformę do współpracy projektów.

  • azure Pipelines umożliwia tworzenie, testowanie, pakowanie i wydawanie kodu aplikacji i infrastruktury. W tym przykładzie istnieją trzy odrębne przepływy pracy z następującymi obowiązkami:

    • Przepływy pracy dla pull requestów sprawdzają kod przed zezwoleniem na scalanie poprzez linting, kompilację i testy jednostkowe.
    • Potoki CI uruchamiane są po scaleniu kodu. Wykonują tę samą walidację, co pipeline'y PR, ale dodają testy integracyjne i publikują artefakty kompilacji, jeśli wszystko przebiegnie pomyślnie.
    • Pipelines CI/CD wdrażają artefakty kompilacji, uruchamiają testy akceptacyjne i wdrażają do środowiska produkcyjnego.
  • usługi Azure Artifact Feeds umożliwiają zarządzanie pakietami oprogramowania i udostępnianie ich, takich jak Maven, npm i NuGet. Źródła artefaktów umożliwiają zarządzanie cyklem życia pakietów, w tym wersjonowanie, promowanie i wycofywanie pakietów. Pomaga to zapewnić, że twój zespół korzysta z najnowszych i najbezpieczniejszych wersji pakietów.

  • Key Vault umożliwia zarządzanie bezpiecznymi danymi w ramach Twojego rozwiązania, w tym tajemnicami, kluczami szyfrowania i certyfikatami. W tej architekturze używa się jej do przechowywania sekretów aplikacji. Dostęp do tych tajemnic jest uzyskiwany za pośrednictwem potoku danych. Dostęp do tajemnic może być uzyskany przez Azure Pipelines z użyciem zadania Key Vault lub poprzez łączenie tajemnic z Key Vault .

  • Monitor to zasób, który zbiera i przechowuje metryki i dzienniki, dane telemetryczne aplikacji i metryki platformy dla usług platformy Azure. Te dane służą do monitorowania aplikacji, konfigurowania alertów, pulpitów nawigacyjnych i przeprowadzania analizy głównej przyczyny awarii.

  • application insights to usługa monitorowania, która zapewnia wgląd w wydajność i użycie aplikacji internetowych w czasie rzeczywistym.

  • obszar roboczy usługi Log Analytics udostępnia centralną lokalizację, w której można przechowywać, wykonywać zapytania i analizować dane z wielu źródeł, w tym zasobów platformy Azure, aplikacji i usług.

Alternatywy

Chociaż ten artykuł koncentruje się na usłudze Azure Pipelines, możesz rozważyć następujące alternatywy:

  • Azure DevOps Server można używać jako zamiennika dla rozwiązań lokalnych.

  • Jenkins to narzędzie typu open source służące do automatyzowania kompilacji i wdrożeń.

  • GitHub Actions umożliwiają automatyzowanie workflowów CI/CD bezpośrednio na GitHubie.

  • Repozytoria GitHub mogą być używane jako repozytorium kodu. Usługa Azure Pipelines bezproblemowo integruje się z repozytoriami GitHub.

Ten artykuł koncentruje się na ogólnych praktykach CI/CD w narzędziu Azure Pipelines. Poniżej przedstawiono niektóre środowiska obliczeniowe, w których można rozważyć wdrożenie:

  • App Service to oparta na protokole HTTP usługa do hostowania aplikacji internetowych, interfejsów API REST i zapleczy mobilnych. Możesz programować w ulubionym języku, a aplikacje są uruchamiane i skalowane z łatwością zarówno w środowiskach opartych na systemach Windows, jak i Linux. Usługa Web Apps obsługuje miejsca wdrożeniowe, takie jak środowisko testowe i produkcyjne. Aplikację można wdrożyć w gnieździe testowym i przenieść do gniazda produkcyjnego.

  • usługa Azure Virtual Machines obsługuje obciążenia wymagające wysokiego stopnia kontroli lub zależą od składników i usług systemu operacyjnego, które nie są możliwe w przypadku usługi Web Apps.

  • azure Power Platform to zbiór usług w chmurze, które umożliwiają użytkownikom tworzenie, wdrażanie i zarządzanie aplikacjami bez konieczności posiadania wiedzy technicznej lub infrastruktury.

  • azure Functions to bezserwerowa platforma obliczeniowa, której można użyć do tworzenia aplikacji. Za pomocą usługi Functions można integrować usługi za pomocą wyzwalaczy i powiązań. Funkcje obsługują również miejsca wdrożeniowe, takie jak testowe i produkcyjne. Aplikację można wdrożyć w slocie testowym i przenieść do slotu produkcyjnego.

  • azure Kubernetes Service (AKS) to zarządzany klaster Kubernetes na platformie Azure. Kubernetes to platforma orkiestracji kontenerów typu open source.

  • usługa Azure Container Apps umożliwia uruchamianie konteneryzowanych aplikacji na platformie bezserwerowej.

Szczegóły scenariusza

Korzystanie ze sprawdzonych praktyk ciągłej integracji i ciągłego wdrażania w celu wdrożenia zmian aplikacji lub infrastruktury zapewnia różne korzyści, takie jak:

  • Krótsze Cykle Wydawania — zautomatyzowane procesy CI/CD umożliwiają szybsze wdrażanie niż w przypadku procesów ręcznych. Wiele organizacji wdraża wiele razy dziennie.
  • lepsza jakość kodu — bramy jakości w potokach ciągłej integracji, takie jak linting i testy jednostkowe, powodują zwiększenie jakości kodu.
  • Zmniejszone ryzyko wydania — odpowiednie praktyki ciągłej integracji/ciągłego wdrażania znacznie zmniejszają ryzyko wydania nowych funkcji. Wdrożenie można przetestować przed wydaniem.
  • Zwiększona produktywność — zautomatyzowane CI/CD uwalnia programistów od pracy nad ręcznymi integracjami i wdrożeniami, aby mogli skupić się na nowych funkcjach.
  • Włącz możliwość cofania zmian — chociaż praktyki CI/CD (ciągłej integracji i ciągłego wdrażania) obniżają liczbę wydanych usterek lub regresji, możliwość ich wystąpienia nadal istnieje. CI/CD może umożliwiać automatyczne wycofywanie do poprzednich wersji.

Potencjalne przypadki użycia

Rozważ użycie Azure Pipelines oraz procesów CI/CD dla:

  • Przyspieszanie opracowywania i wdrażania aplikacji.
  • Tworzenie jakości i spójności w zautomatyzowanym procesie kompilacji i wydawania.
  • Zwiększanie stabilności i czasu pracy aplikacji.

Zagadnienia dotyczące

Te zagadnienia obejmują implementację filarów platformy Azure Well-Architected Framework, która jest zestawem wytycznych, które mogą służyć do poprawy jakości obciążenia. Aby uzyskać więcej informacji, zobacz Microsoft Azure Well-Architected Framework.

Doskonałość operacyjna

  • Rozważ zaimplementowanie infrastruktury jako kodu (IaC) w celu zdefiniowania swojej infrastruktury i wdrożenia jej w pipeline'ach.

  • Rozważ użycie jednego z zadań tokenizacji dostępnych na rynku VSTS, co często oznacza proces, w którym poufne informacje (takie jak klucze API, hasła lub inne tajne informacje) są zastępowane tokenami lub zastępczymi symbolami podczas wdrażania lub konfiguracji.

  • Użyj zmiennych wydania w definicjach wydania, aby napędzać zmiany konfiguracji środowisk. Zmienne w wydaniu mogą być ograniczone do całego wydania lub danego środowiska. W przypadku używania zmiennych dla informacji tajnych upewnij się, że wybrano ikonę kłódki.

  • Rozważ użycie samodzielnie hostowanych agentów, jeśli wdrażasz je na zasoby uruchomione w zabezpieczonej sieci wirtualnej. Jeśli korzystasz z dużej liczby kompilacji, możesz również rozważyć samodzielnie hostowanych agentów. W przypadku dużych woluminów kompilacji agenci z własnym hostingiem mogą być używani do przyspieszania kompilacji w sposób efektywny kosztowo.

  • Rozważ użycie usługi Application Insights i innych narzędzi do monitorowania tak wcześnie, jak to możliwe w procesie wdrażania. Wiele organizacji rozpoczyna monitorowanie tylko w swoim środowisku produkcyjnym. Monitorując inne środowiska, można zidentyfikować usterki wcześniej w procesie programowania i uniknąć problemów w środowisku produkcyjnym.

  • Rozważ użycie oddzielnych zasobów monitorowania dla środowiska produkcyjnego.

  • Rozważ użycie potoków YAML zamiast interfejsu klasycznego. Potoki YAML mogą być traktowane jak każdy inny kod. Potoki YAML można na przykład zaewidencjonować pod kątem kontroli źródła i wersji.

  • Rozważ użycie szablonów YAML w celu promowania ponownego użycia i uproszczenia potoków. Na przykład pipeline'y PR i CI są podobne. Dla obu potoków można użyć jednego szablonu sparametryzowanego.

  • Rozważ utworzenie środowisk poza środowiskiem przejściowym i produkcyjnym, aby obsługiwać działania, takie jak ręczne testowanie akceptacyjne użytkowników, testowanie wydajności i obciążenia oraz wycofywanie.

Optymalizacja kosztów

Optymalizacja kosztów dotyczy sposobów zmniejszenia niepotrzebnych wydatków i poprawy wydajności operacyjnej. Aby uzyskać więcej informacji, zobacz Omówienie filaru optymalizacji kosztów.

Koszty usługi Azure DevOps zależą od liczby użytkowników w organizacji, którzy wymagają dostępu, wraz z innymi czynnikami, takimi jak liczba wymaganych współbieżnych kompilacji/wydań i liczba użytkowników testowych. Aby uzyskać więcej informacji, zobacz cennik usługi Azure DevOps.

Ten kalkulator cen zawiera oszacowanie uruchamiania usługi Azure DevOps z 20 użytkownikami.

Usługa Azure DevOps jest rozliczana według poszczególnych użytkowników miesięcznie. Mogą wystąpić dodatkowe opłaty w zależności od liczby potrzebnych równoczesnych potoków, a także dodatkowych użytkowników testowych lub licencji dla podstawowych użytkowników.

Bezpieczeństwo

  • Przy rozważaniu wyboru między agentami hostowanymi przez firmę Microsoft a agentami własnymi, należy rozważyć korzyści związanych z bezpieczeństwem.

  • Upewnij się, że wszystkie zmiany w środowiskach są wykonywane za pośrednictwem pipeline'ów. Zaimplementuj mechanizmy kontroli dostępu opartej na rolach (RBAC) na zasadzie najniższych uprawnień, uniemożliwiając użytkownikom dostęp do środowisk.

  • Rozważ zintegrowanie kroków w usłudze Azure Pipelines, aby śledzić zależności, zarządzać licencjonowaniem, skanować pod kątem luk w zabezpieczeniach i aktualizować zależności.

Następne kroki

Zapoznaj się z następującymi zasobami, aby więcej się dowiedzieć o CI/CD i Azure DevOps.