Bazowa architektura CI/CD platformy Azure Pipelines

W tym artykule przedstawiono architekturę referencyjną do budowy potoku ciągłej integracji i ciągłego wdrażania (CI/CD) przy użyciu usługi Azure Pipelines. Użyj tej architektury jako punktu wyjścia, jeśli musisz zautomatyzować tworzenie, testowanie i wdrażanie aplikacji w środowiskach przejściowych i produkcyjnych w Azure. Architektura definiuje trzy potoki: pull request (PR), ciągłą integrację (CI) i ciągłe wdrażanie (CD), oraz pokazuje, jak współpracują one z Azure Repos, Azure Key Vault i Azure Monitor, aby bezpiecznie weryfikować, kompilować i wdrażać aplikacje.

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 potok uruchamia te same kontrole co potok PR, a także testy integracyjne. Potok CI uruchamia testy integracyjne zamiast potoku PR z dwóch powodów:

    • Testy integracji mogą być intensywnie obciążane zasobami, dlatego uruchomienie ich po scaleniu równoważy szybkość programowania z wykrywaniem błędów.
    • To, że testy przechodzą w PR, nie gwarantuje, że będą nadal przechodzić po scaleniu, ponieważ zmiany w gałęzi głównej mogą wprowadzić nowe problemy, które można wykryć dopiero w testach po scaleniu.

    Te testy integracji nie powinny wymagać wdrożenia rozwiązania, ponieważ artefakty kompilacji nie zostały jeszcze utworzone. Jeśli test wymaga wpisów tajnych, potok pobiera je z Azure Key Vault. Jeśli sprawdzanie zakończy się niepowodzeniem, potok kończy się, a deweloper musi wprowadzić wymagane zmiany. Pomyślne uruchomienie tego potoku powoduje utworzenie i opublikowanie 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.
  • kanały informacyjne Azure Artifacts umożliwiają zarządzanie pakietami oprogramowania, takimi jak Maven, npm i NuGet oraz udostępnianie ich. Kanały informacyjne umożliwiają zarządzanie cyklem życia pakietów, w tym przechowywanie wersji, promowanie i wycofywanie pakietów, co pomaga zapewnić zespołowi korzystanie z najnowszych i najbezpieczniejszych wersji zależności.

  • 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 App Service obsługuje miejsca wdrożenia, takie jak przejściowe i produkcyjne, dzięki czemu można wdrożyć aplikację w miejscu przejściowym i zwolnić ją w miejscu produkcyjnym.

  • 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 usłudze App Service.

  • 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 gnieździe testowym i przenieść do gniazda 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.
  • Mniejsze ryzyko wdrożenia — odpowiednie praktyki CI/CD znacząco zmniejszają ryzyko wdrażania nowych funkcji, ponieważ można je przetestować przed wdrożeniem.
  • 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órych można 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.

  • 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 własnych agentów , jeśli wdrażasz je w zasobach uruchomionych w zabezpieczonej sieci wirtualnej lub jeśli uruchamiasz dużą liczbę kompilacji. Agenty hostowane samodzielnie mogą pomóc przyspieszyć kompilacje w opłacalny sposób na dużą skalę.

  • 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.

Zabezpieczenia

  • 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 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