M365Con 2027 – bezpłatna konferencja online · 11–22 Jan 2027 · 120 sessions→ m365con.net

Blog · Mirko Peters

Opanowanie jednostek usługowych i pul agentów w procesach CI/CD dla Power Platform

By ·

Witamy ponownie, budowniczowie chmury i architekci automatyzacji! Jeśli zdarzyło Ci się kiedyś spędzić nocne okno wdrożeniowe na gorączkowym pakowaniu rozwiązań, zastanawiając się, kto wprowadził nieau… *Uwaga: otrzymany segment wygląda na ucięty (kończy się na „unau…”). Proszę o przesłanie pełnego tekstu, aby można było przetłumaczyć całość.*

Automatically translated with AI from the original post. Read the English original

▶ BLOGMastering ServicePrincipals and Agent…M365.FM
Titelbild: Mastering Service Principals and Agent Pools for Power Platform CI/CD

Witajcie ponownie, budowniczowie chmury i architekci automatyzacji! Jeśli kiedykolwiek w nocnym oknie wdrożenia gorączkowo pakowaliście rozwiązania w pliki zip, zastanawiając się, kto nieautoryzowanie wprowadził ręczne zmiany bezpośrednio w środowisku produkcyjnym, albo patrzyliście, jak krytyczne wdrożenie się sypie, bo pominięto przepływ podrzędny, ten wpis jest dla was. W najnowszym odcinku podcastu Azure DevOps Pipelines for Power Platform Deployments szczegółowo omawiamy, jak przerwać cykl liczenia na to, że importy się uda, i zacząć dostarczać powtarzalne, odwracalne i w pełni audytowalne wydania. Aby pomóc przełożyć te wnioski z nagrania na praktyczne decyzje architektoniczne, ten towarzyszący przewodnik rozwija konkretne strategie, których potrzebujecie, by zabezpieczyć potoki Azure DevOps przy użyciu jednostek usługowych działających według zasady najmniejszych uprawnień, odpowiednio skonfigurowanych pul agentów oraz solidnych strategii wycofywania zmian.

Wprowadzenie do CI/CD w Power Platform

Ciągła integracja i ciągłe wdrażanie (CI/CD) dla Power Platform nie są już opcjonalnym dodatkiem dla rozwiązań korporacyjnych. Wraz z przyspieszaniem rozwoju low-code, który napędza transformację biznesową, rozrost aplikacji kanwowych, aplikacji opartych na modelu, tabel Dataverse i przepływów w chmurze wymaga rygorystycznych standardów inżynierskich. Przejście od chaotycznych ręcznych eksportów do zautomatyzowanych potoków gwarantuje, że zmiany w kodzie będą podążać przewidywalną ścieżką od rozwoju przez testy jakości aż po środowisko produkcyjne. Traktując rozwiązania Power Platform z taką samą powagą i dyscypliną jak tradycyjne bazy kodu inżynierii oprogramowania, znacząco ograniczacie ryzyko systemowe i eliminujecie błędy ludzkie, które dotykają ręczne zadania administracyjne.

Ręcznie czy automatycznie: dlaczego wygrywają potoki

Bolączki ręcznych wdrożeń są legendarne. Wszyscy doświadczyliśmy żonglowania plikami zip, gdy członkowie zespołu zadają przerażające pytanie: „Kto właściwie ma najnowszą wersję?”. Prowadzi to wprost do poważnego dryfu środowisk, w którym role, łączniki i zmienne konfiguracyjne powoli rozjeżdżają się między środowiskami. Ponadto ręczne procesy często prowadzą do cichych awarii, w których brakujące odwołania do połączeń lub przepływy podrzędne wychodzą na jaw dopiero wtedy, gdy zirytowani użytkownicy końcowi zgłaszają zepsute krytyczne procesy biznesowe.

Z drugiej strony zautomatyzowane potoki oferują ogromne korzyści. Zapewniają powtarzalne ramy eksportu i importu rozwiązań wraz ze szczegółowymi dziennikami i pełną identyfikowalnością. Zamiast odkrywać błędy w trakcie demonstracji, potoki wychwytują awarie już na etapie kompilacji. Co najważniejsze, automatyzacja zapewnia pełną audytowalność: zawsze będziecie wiedzieć dokładnie, kto co wdrożył, kiedy to wdrożono i gdzie trafiło.

Spoiwo: połączenia usługowe i pule agentów

Podczas podłączania potoków Azure DevOps do środowisk Power Platform architektura bezpieczeństwa opiera się w dużej mierze na połączeniach usługowych i pulach agentów. Prawidłowe ustawienie tych fundamentów ma kluczowe znaczenie zarówno dla bezpieczeństwa, jak i stabilności operacyjnej.

Połączenia usługowe (jednostki usługowe)

Nigdy nie współdzielcie jednego konta administratora między wszystkimi środowiskami. Zamiast tego wdrożcie jedną jednostkę usługową (SP) na środowisko (Dev, QA, Prod). Zapewnia to zasadę najmniejszych uprawnień i umożliwia czyste unieważnienie dostępu, jeśli kiedykolwiek dojdzie do ujawnienia sekretu. Przypisujcie tym jednostkom usługowym minimalne role Dataverse; globalne używanie roli administratora systemu to niebezpieczne ostateczne wyjście. Preferujcie zawężone role zabezpieczeń, które odpowiadają dokładnym potrzebom waszego potoku wdrożeniowego. Przechowujcie sekrety klienta bezpiecznie w usłudze Azure Key Vault, odwołując się do nich dynamicznie za pomocą zmiennych potoku, i ustalcie ścisły harmonogram rotacji sekretów. Przed wykonaniem pierwszego prawdziwego uruchomienia zawsze przeprowadźcie próbę (dry-run), aby zweryfikować połączenie i wykonać testowy eksport.

Pule agentów

Wybór odpowiedniej architektury pul agentów zależy w dużej mierze od granic bezpieczeństwa Twojej organizacji. Agenty hostowane przez Microsoft zapewniają szybki start i sprawdzają się w standardowych zadaniach. Jednak agenty self-hosted są często wymagane, jeśli potrzebujesz niestandardowych narzędzi, konkretnych wersji oprogramowania, premium modułów sieciowych lub dostępu do prywatnej sieci za korporacyjną zaporą sieciową. Konfigurując agenty self-hosted, dokładnie przygotuj bazowy obraz agenta, instalując z góry Power Platform Build Tools, PAC CLI i wymagane moduły PowerShell, a ich wersje przypnij, aby uniknąć niezgodnych zmian.

Lista kontrolna najczęstszych pułapek

Uważaj na typowe pułapki związane z uwierzytelnianiem. Jeśli jednostka usługi nie ma odpowiedniej roli w Dataverse, uwierzytelnianie się powiedzie, ale importy rozwiązań zakończą się niewyjaśnionym błędem. Wygasłe sekrety klienta prowadzą do sporadycznych, frustrujących niestabilności potoków. Na koniec upewnij się, że agenty self-hosted mają prawidłowo skonfigurowane listy dozwolonych adresów IP i reguł zapory, aby zapobiec irytującym przekroczeniom czasu wdrożenia.

Automatyczne zabezpieczenia: wykrywaj problemy, zanim trafią na produkcję

Potoki powinny robić więcej niż tylko przenosić pliki zip; powinny działać jak inteligentni strażnicy. Kontrole na etapie kompilacji to Twoja pierwsza linia obrony. Uruchom zadanie Solution Checker i natychmiast przerwij potok, jeśli wykryte zostaną problemy o wysokim lub krytycznym priorytecie. Wykonuj porównania zależności, aby upewnić się, że wszystkie przepływy podrzędne, kontrolki PCF i odwołania do połączeń są prawidłowo spakowane w rozwiązaniu. Weryfikuj zmienne środowiskowe, sprawdzaj zgodność schematu z docelowym środowiskiem i blokuj destrukcyjne modyfikacje bazy danych, chyba że zostały wyraźnie zatwierdzone.

Walidacje przed wdrożeniem w środowisku docelowym są równie istotne. Rozwiąż odwołania do połączeń w zatwierdzone łączniki zarządzane, zweryfikuj role zabezpieczeń i dostęp aplikacji dla kont usługowych oraz uruchom zautomatyzowane testy dymne w trybie testowym w środowisku QA bezpośrednio po imporcie.

Wycofywanie zmian i kopie zapasowe, które nie są życzeniowym myśleniem

Nadzieja nie jest strategią wdrożenia. Przed każdym wdrożeniem produkcyjnym potok powinien automatycznie wyeksportować bieżące rozwiązanie zarządzane i zapisać je w repozytorium kodu źródłowego lub repozytorium artefaktów. Równocześnie uruchom kopię zapasową lub migawkę środowiska w Dataverse i oznacz wydanie w Azure DevOps odpowiednim numerem kompilacji oraz wersją rozwiązania.

Jeśli coś przestanie działać w środowisku produkcyjnym, ścieżka odzyskiwania musi być natychmiastowa i mechaniczna. Najpierw ponownie wdróż ostatni znany dobry artefakt rozwiązania zarządzanego. Jeśli występuje poważne uszkodzenie danych lub schematu, przywróć pełną migawkę środowiska Dataverse lub wykonaj ukierunkowane przywracanie na poziomie tabeli. Bezpośrednio po przywróceniu ponownie uruchom standardowe walidacje i ukierunkowane testy dymne. Praktyka czyni mistrza: regularnie przeprowadzaj ćwiczenia wycofywania zmian w środowiskach piaskownicy, dokumentuj czasy i kroki oraz śledź średni czas odzyskiwania po incydentach wdrożeniowych (MTTR), aby na bieżąco eliminować luki operacyjne.

Przykładowy potok (zarys YAML)

Aby zobaczyć, jak te elementy ze sobą współgrają, zorganizuj architekturę CI/CD w odrębne fazy Build i Release:

Build (CI)

  • Uruchamiaj automatycznie przy zmianach w gałęzi main dotyczących folderu rozwiązania.
  • Wykonuj zadania obejmujące pakowanie i eksport niezarządzanych rozwiązań do pakietów zarządzanych, uruchamianie Solution Checker, wykonywanie skryptów walidacji zależności i konfiguracji oraz publikowanie wynikowego archiwum zip zarządzanego i raportów walidacji jako artefaktów potoku.

Release (CD)

  • Zdefiniuj sekwencyjne etapy przechodzące od QA do produkcji, zabezpieczone ręcznymi bramkami zatwierdzania.
  • Pre-Deploy: Automatycznie mapuj odwołania do połączeń oraz waliduj zmienne środowiskowe i role zabezpieczeń.
  • Deploy: Zaimportuj rozwiązanie jako pakiet zarządzany, przygotowując je do aktualizacji, jeśli zajdzie potrzeba.
  • Post-Deploy: Uruchom zautomatyzowane testy dymne, w tym uruchomienia testowe przepływów i sprawdzenia dostępności aplikacji, a następnie opublikuj wyniki.
  • Rollback Job (w razie niepowodzenia): Automatycznie ponownie zaimportuj poprzedni artefakt zarządzany, wyślij powiadomienia do kanału operacyjnego i utwórz zgłoszenie w systemie zarządzania incydentami.

Konfiguracja środowiska jako kod

Ręczne zarządzanie konfiguracjami specyficznymi dla środowisk to prosta droga do katastrofy. Przechowuj zmienne środowiskowe, mapowania odwołań do połączeń oraz przypisania ról zabezpieczeń jako ustrukturyzowane pliki JSON lub YAML w repozytorium. Sparametryzuj te konfiguracje według etapu, tak aby wartości dla środowisk QA i produkcyjnego były wstrzykiwane dynamicznie za pomocą skryptów tuż przed uruchomieniem zadania importu. Utrzymuj przejrzysty kontrakt danych dla każdego rozwiązania, opisujący wymagane łączniki, wymagane uprawnienia oraz flagi funkcji.

Typowe wzorce błędów (i rozwiązania)

  • „U mnie działało w środowisku Dev” (brakujące odwołania do połączeń w QA/Prod)
    • Rozwiązanie: Sprawdzaj i jawnie mapuj odwołania w potoku; przerywaj działanie na wczesnym etapie, jeśli jakiekolwiek odwołanie pozostaje nierozwiązane.
  • Brakujący przepływ podrzędny
    • Rozwiązanie: Wymuszaj ścisłe skanowanie zależności; blokuj eksport rozwiązania, jeśli którykolwiek przywoływany zasób nie znajduje się w kontenerze rozwiązania.
  • Agent nie może połączyć się z Dataverse
    • Rozwiązanie: Zaktualizuj listy dozwolonych adresów w konfiguracji sieciowej samodzielnie hostowanego agenta i wdroż logikę ponawiania z wykładniczym opóźnieniem.
  • Stan częściowego importu
    • Rozwiązanie: Skonfiguruj automatyczne mechanizmy wycofywania zmian, które ponownie wdrożą poprzednią zarządzaną wersję, a w przypadku wykrycia poważnego dryfu schematu – eskalują do pełnego przywrócenia środowiska.

KPI potwierdzające dojrzałość

Skąd wiesz, że Twoja dojrzałość w zakresie CI/CD rośnie? Śledź w czasie następujące kluczowe wskaźniki efektywności:

  • Wskaźnik niepowodzeń zmian (CFR) – powinien wykazywać tendencję spadkową.
  • Średni czas przywrócenia (MTTR) – powinien wykazywać tendencję spadkową.
  • Czas realizacji zmiany (lead time for change) – powinien wykazywać tendencję spadkową.
  • Odsetek wdrożeń zablokowanych na etapie kompilacji – powinien wykazywać tendencję wzrostową, dowodząc, że zautomatyzowane zabezpieczenia wychwytują problemy na wczesnym etapie.
  • Wskaźnik powodzenia ćwiczeń wycofywania zmian – powinien wykazywać tendencję wzrostową w kierunku 100 procent.

Lista kontrolna na start (w tym tygodniu)

Gotowy na modernizację potoku wdrożeniowego? Zrealizuj w tym tygodniu następujące konkretne kroki:

  • Utwórz dedykowane jednostki usługi (service principal) dla każdego środowiska i przypisz role Dataverse z zasadą najmniejszych uprawnień.
  • Uruchom samodzielnie hostowanego agenta (jeśli izolacja sieci tego wymaga) i zapisz wersje wszystkich narzędzi oraz interfejsów CLI jako punkt odniesienia.
  • Dodaj zadania Solution Checker oraz automatyczną walidację zależności i konfiguracji do potoku CI.
  • Sparametryzuj zmienne środowiskowe i odwołania do połączeń, przechowując je jako kod w repozytorium.
  • Włącz kopie zapasowe środowisk przedprodukcyjnych przy każdym wydaniu i eksportuj poprzednie rozwiązania jako niezawodne artefakty.
  • Udokumentuj i przetestuj pełne ćwiczenie wycofania zmian w piaskownicy środowiska nieprodukcyjnego.

Odchodząc od kruchych, ręcznych nawyków na rzecz solidnych potoków opartych na jednostkach usługi i pulach agentów, Twoja organizacja może osiągnąć w Power Platform niezawodność klasy enterprise. Nie zapomnij posłuchać pełnej dyskusji w naszym odcinku podcastu Azure DevOps Pipelines for Power Platform Deployments, w którym omawiamy te konkretne wzorce i dzielimy się kolejnymi wskazówkami, jak usprawnić wdrożenia w chmurze. Powodzenia w budowaniu!

Entities in this article

Power Platform Azure DevOps Dataverse Automation Canvas app Client secret Continuous integration Model-driven app Service principal Traceability

Related articles

RSS