Architektura punktu odniesienia ciągłej integracji/ciągłego wdrażania za pomocą usługi 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żne

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

Architektura

Diagram architektury potoku ciągłej integracji/ciągłego wdrażania przy użyciu usługi Azure Pipelines.

Pobierz plik programu Visio z tą architekturą.

Uwaga

Chociaż w tym artykule opisano ciągłą integrację/ciągłe wdrażanie dla zmian aplikacji, usługa Azure Pipelines może również służyć do tworzenia potoków ciągłej integracji/ciągłego wdrażania dla zmian infrastruktury jako kodu (IaC).

Przepływ danych

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

  1. Potok żądania ściągnięcia — żądanie ściągnięcia (PR) do usługi Azure Repos Git wyzwala potok żądania ściągnięcia. Ten potok 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, uruchomienie potoku zakończy się, a deweloper będzie musiał wprowadzić wymagane zmiany. Jeśli wszystkie testy przebiegną, potok powinien wymagać przeglądu żądania ściągnięcia. Jeśli przegląd żądania ściągnięcia 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 zostaną pomyślnie scalone, żądanie ściągnięcia zostanie pomyślnie scalone.

  2. Potok ciągłej integracji — scalanie z usługą Azure Repos Git wyzwala potok ciągłej integracji. Ten potok uruchamia te same kontrole co potok żądania ściągnięcia z pewnymi ważnymi dodatkami. Potok ciągłej integracji uruchamia testy integracji. Te testy integracji nie powinny wymagać wdrożenia rozwiązania, ponieważ artefakty kompilacji nie zostały jeszcze utworzone. Jeśli testy integracji wymagają wpisów tajnych, potok pobiera te wpisy tajne z usługi Azure Key Vault. Jeśli którykolwiek z testów zakończy się niepowodzeniem, potok zakończy się, a deweloper będzie musiał wprowadzić wymagane zmiany. Wynikiem pomyślnego uruchomienia tego potoku jest tworzenie i publikowanie artefaktów kompilacji

  3. Wyzwalacz potoku ciągłego wdrażania — publikowanie artefaktów wyzwala potok ciągłego wdrażania.

  4. Wydanie ciągłego wdrażania do przemieszczania — potok ciągłego wdrażania pobiera artefakty kompilacji utworzone w potoku ciągłej integracji i wdraża rozwiązanie w środowisku przejściowym. Następnie potok uruchamia testy akceptacyjnych względem środowiska przejściowego w celu zweryfikowania wdrożenia. Jeśli jakikolwiek test akceptacji zakończy się niepowodzeniem, potok zakończy się, a deweloper będzie musiał wprowadzić wymagane zmiany. Jeśli testy powiedzie się, można zaimplementować zadanie ręcznej weryfikacji , aby wymagać od osoby lub grupy zweryfikowania wdrożenia i wznowienia potoku.

  5. Wydanie ciągłego wdrażania w środowisku produkcyjnym — jeśli interwencja ręczna zostanie wznowiona lub nie zaimplementowano ręcznej interwencji, potok zwalnia rozwiązanie do środowiska produkcyjnego. Potok powinien uruchamiać testy weryfikacyjne kompilacji 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 kompilacji zakończą się niepowodzeniem, wydanie zostanie wycofane, potok kończy się, 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. Aplikacja Szczegółowe informacje 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 Git usługi Azure Repos służy jako repozytorium kodu, które zapewnia kontrolę wersji i platformę do współpracy projektów.

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

    • Potoki żądania ściągnięcia weryfikują kod przed zezwoleniem żądania ściągnięcia na scalanie za pośrednictwem lintingu, kompilowania i testowania jednostkowego.
    • Potoki ciągłej integracji są uruchamiane po scaleniu kodu. Wykonują tę samą walidację co potoki żądania ściągnięcia, ale dodają testy integracji i publikują artefakty kompilacji, jeśli wszystko powiedzie się.
    • Potoki ciągłego wdrażania wdrażają artefakty kompilacji, uruchamiają testy akceptacyjnych i zwalniają w środowisku produkcyjnym.
  • Źródła danych usługi Azure Artifact umożliwiają zarządzanie pakietami oprogramowania, takimi jak Maven, npm i NuGet oraz udostępnianie ich. Źródła artefaktów umożliwiają zarządzanie cyklem życia pakietów, w tym przechowywanie wersji, promowanie i wycofywanie pakietów. Pomaga to zapewnić, że twój zespół korzysta z najnowszych i najbezpieczniejszych wersji pakietów.

  • Usługa Key Vault umożliwia zarządzanie bezpiecznymi danymi dla rozwiązania, w tym wpisami tajnymi, kluczami szyfrowania i certyfikatami. W tej architekturze jest używana do przechowywania wpisów tajnych aplikacji. Dostęp do tych wpisów tajnych jest uzyskiwany za pośrednictwem potoku. Dostęp do wpisów tajnych można uzyskać za pomocą usługi Azure Pipelines za pomocą zadania usługi Key Vault lub przez połączenie wpisów tajnych z usługi Key Vault.

  • Monitor to zasób obserwacji, 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.

  • Aplikacja Szczegółowe informacje 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:

  • Serwer Azure DevOps Server (wcześniej znany jako Team Foundation Server) może służyć jako lokalny zamiennik.

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

  • Funkcja GitHub Actions umożliwia automatyzowanie przepływów pracy ciągłej integracji/ciągłego wdrażania bezpośrednio z usługi GitHub.

  • Repozytoria GitHub można zastąpić repozytorium kodu. Usługa Azure Pipelines bezproblemowo integruje się z repozytoriami GitHub.

Ten artykuł koncentruje się na ogólnych praktykach ciągłej integracji/ciągłego wdrażania w usłudze Azure Pipelines. Poniżej przedstawiono niektóre środowiska obliczeniowe, w których można rozważyć wdrożenie:

  • App Services 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żenia, takie jak przejściowe i produkcyjne. Aplikację można wdrożyć w miejscu przejściowym i zwolnić ją w miejscu produkcyjnym.

  • 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 (na przykład windows GAC lub COM).

  • 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 infrastruktury lub wiedzy technicznej.

  • 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żenia, takie jak przejściowe i produkcyjne. Aplikację można wdrożyć w miejscu przejściowym i zwolnić ją w miejscu produkcyjnym.

  • Usługa 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ągłej integracji/ciągłego wdrażania umożliwiają szybsze wdrażanie niż w przypadku rozwiązań 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ść — automatyczna ciągła integracja/ciągłe wdrażanie zwalnia deweloperów z pracy nad ręcznymi integracją i wdrożeniami, aby mogli skupić się na nowych funkcjach.
  • Włącz wycofywanie — chociaż odpowiednie praktyki ciągłej integracji/ciągłego wdrażania obniżają liczbę wydanych usterek lub regresji, nadal występują. Ciągła integracja/ciągłe wdrażanie umożliwia automatyczne wycofywanie do wcześniejszych wersji.

Potencjalne przypadki użycia

Rozważ użycie usług Azure Pipelines i procesów ciągłej integracji/ciągłego wdrażania 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.

Kwestie wymagające rozważenia

Te zagadnienia implementują filary struktury 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), aby zdefiniować infrastrukturę i wdrożyć ją w potokach.

  • Rozważ użycie jednego z zadań tokenizacji dostępnych na platformie handlowej usługi VSTS, w kontekście często odnosi się do procesu, w którym poufne informacje (takie jak klucze interfejsu API, hasła lub inne wpisy tajne) są zastępowane tokenami lub symbolami zastępczymi podczas wdrażania lub konfiguracji.

  • Użyj zmiennych wydania w definicjach wydania, aby napędzać zmiany konfiguracji środowisk. Zmienne wydania mogą być ograniczone do całej wersji 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. 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 self-hosted mogą służyć do przyspieszania kompilacji w sposób ekonomiczny.

  • Rozważ użycie Szczegółowe informacje aplikacji i innych narzędzi do monitorowania tak szybko, jak to możliwe w potoku wydania. 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 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 podwyższenia poziomu ponownego użycia i uproszczenia potoków. Na przykład potoki żądań ściągnięcia i ciągłej integracji 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. Może być więcej opłat w zależności od wymaganych współbieżnych potoków, oprócz dodatkowych użytkowników testowych lub licencji podstawowych użytkowników.

Zabezpieczenia

  • Podczas wybierania, czy używać agentów hostowanych przez firmę Microsoft, czy samodzielnie hostowanych przez firmę Microsoft, należy wziąć pod uwagę zalety zabezpieczeń.

  • Upewnij się, że wszystkie zmiany w środowiskach są wykonywane za pośrednictwem potokó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 dowiedzieć się więcej na temat ciągłej integracji/ciągłego wdrażania i usługi Azure DevOps: