Budowanie niezawodnego pipeline'u: wdrożenia Power Platform krok po kroku
By Mirko Peters ·
Witamy ponownie na blogu podcastu! Jeśli kiedykolwiek patrzyłeś, jak krytyczne wdrożenie Power Platform nagle i boleśnie staje z powodu zerwanego połączenia z odwołaniem do połączenia, wygasłego sekretu lub brakującej zmiennej środowiskowej, to na pewno nie jesteś sam. Przenoszenie rozwiązań low-code i pro-code między środowiskami potrafi czasem przypominać przechodzenie przez pole minowe. Ale nie
Automatically translated with AI from the original post. Read the English original
Witamy ponownie na blogu podcastu! Jeśli kiedykolwiek patrzyłeś, jak krytyczne wdrożenie Power Platform nagle i boleśnie staje z powodu zerwanego połączenia z odwołaniem do połączenia, wygasłego sekretu lub brakującej zmiennej środowiskowej, to na pewno nie jesteś sam. Przenoszenie rozwiązań low-code i pro-code między środowiskami potrafi czasem przypominać przechodzenie przez pole minowe. Ale nie musi tak być.
Dziś zagłębiamy się w to, jak zbudować niezawodny, wieloetapowy pipeline Azure DevOps przygotowany specjalnie dla rozwiązań Power Platform. Ten wpis rozwija kluczowe koncepcje, o których rozmawialiśmy w niedawnym odcinku. Jeśli chcesz posłuchać podsumowania audio i usłyszeć kilka dodatkowych historii z życia wziętych, koniecznie sprawdź powiązany odcinek Implement Power Platform CI/CD with Azure DevOps.
Засучmy rękawy i przejdźmy przez plan drogi do sukcesu.
TL;DR
- Plik ZIP rozwiązania to nie wszystko: zawiera tabele, aplikacje i przepływy, ale zmienne środowiskowe są symbolami zastępczymi, a odwołania do połączeń trzeba powiązać ponownie w każdym środowisku docelowym.
- Używaj Azure DevOps z połączeniami usługowymi dla każdego środowiska, Key Vault do sekretów i sparametryzowanych zmiennych, aby uniknąć twardego kodowania wartości.
- Kształt pipeline'u: eksport do artefaktu, import jako zarządzane, ustawienie zmiennych środowiskowych, mapowanie połączeń, testy dymne, powiadomienie i w razie potrzeby wycofanie zmian.
- Dodaj monitorowanie i pętle informacji zwrotnej, aby każde wydanie było bezpieczniejsze i szybsze.
Co dokładnie znajduje się (a czego nie ma) w rozwiązaniu
Zanim zaprojektujesz zautomatyzowane przepływy pracy, musisz dokładnie rozumieć, co faktycznie zawiera pakiet rozwiązania Dataverse. Nie wszystko znajduje się w tym skompresowanym archiwum, a założenie, że tak jest, to jeden z najszybszych sposobów na zepsucie wdrożenia.
- W pakiecie: tabele Dataverse, kolumny, aplikacje opartej na modelu i aplikacje kanwy, przepływy, procesy biznesowe (BPF), wtyczki i zasoby sieciowe.
- Symbole zastępcze: zmienne środowiskowe. Działają jako symbole zastępcze, które trzeba wypełnić konkretnymi wartościami dla każdego środowiska.
- Wskaźniki: odwołania do połączeń. Wskazują bazowe łączniki, ale muszą zostać zmapowane na rzeczywiste, działające połączenia w środowisku docelowym.
- Nieuwzględnione: sekrety i poświadczenia, punkty końcowe i identyfikatory specyficzne dla środowiska oraz dane referencyjne i wyszukiwania, które należy przenieść osobno za pomocą narzędzia Configuration Migration.
Wymagane elementy składowe Azure DevOps
Aby zorganizować płynne wdrożenie, potrzebujesz odpowiednich narzędzi poprawnie skonfigurowanych w Azure DevOps. Wczesna konfiguracja tych podstawowych elementów zapobiega problemom z bezpieczeństwem w przyszłości.
- Połączenia usługowe (Power Platform): ściśle ograniczone do każdego środowiska docelowego, z zasadą najmniejszych uprawnień.
- Grupy zmiennych: przechowują adresy URL, identyfikatory i flagi funkcji dla poszczególnych środowisk, a jednocześnie bezpiecznie łączą się z Azure Key Vault w przypadku danych wrażliwych, takich jak sekrety klienta i hasła jednostek usługi.
- Artefakty: zachowuj każdy wyeksportowany i pomyślnie zbudowany pakiet rozwiązania, abyś zawsze miał znany, dobry stan do wycofania zmian.
- Zatwierdzenia i bramki: wdróż ręczne kontrole lub zautomatyzowane bramki jakości, zanim jakikolwiek kod trafi do środowiska produkcyjnego.
Szkic referencyjnego pipeline'u (etapy)
Dojrzały pipeline CI/CD powinien być podzielony na wyraźne, logiczne etapy. Oto, jak Twój pipeline powinien przebiegać od rozwoju do produkcji.
- Kompilacja
- Wyeksportuj niezarządzane rozwiązanie ze środowiska deweloperskiego.
- Opcjonalnie przekonwertuj je lub wyeksportuj jako zarządzane dla wyższych środowisk.
- Uruchom zautomatyzowane narzędzie Solution Checker, aby wcześnie wychwycić problemy strukturalne.
- Pakowanie
- Opublikuj plik ZIP rozwiązania jako artefakt pipeline'u, stosując odpowiednie wersjonowanie i tagowanie.
- Wdrożenie do TEST/PROD
- Zaimportuj zarządzany pakiet rozwiązania.
- Ustaw zmienne środowiskowe z wartościami właściwymi dla środowiska docelowego.
- Zmapuj odwołania do połączeń na rzeczywiste połączenia docelowe.
- Uruchom testy dymne, takie jak wyzwolenie kluczowego przepływu, otwarcie podstawowej aplikacji lub sprawdzenie odpowiedzi API.
- Powiadom zespół przez Microsoft Teams lub e-mail, dbając o to, by pipeline natychmiast kończył działanie przy każdym błędzie.
- Po wdrożeniu
- Włącz harmonogramy, rozgrzej usługi i monitoruj napływającą telemetrię.
- Zapewnij mechanizm wycofania zmian jednym kliknięciem, który przywróci ostatni dobry artefakt, jeśli testy dymne zakończą się niepowodzeniem.
Strategia zmiennych i sekretów
Wpisywanie wartości na sztywno to w nowoczesnym DevOps absolutny antywzorzec. Twoja strategia powinna opierać się na rozsądnym połączeniu parametrów, grup zmiennych i bezpiecznych magazynów kluczy.
- Parametry: Używaj parametrów takich jak environment, targetEnvUrl, solutionName i connectionRefNames[], aby szablony YAML były wielokrotnego użytku.
- Grupy zmiennych: Twórz dedykowane grupy dla każdego środowiska, zawierające niepoufne konfiguracje, takie jak ApiBaseUrl, TenantId, DataverseUrl oraz flagi funkcji.
- Key Vault: Przechowuj wrażliwe elementy, takie jak ServicePrincipalSecret i klucze API innych dostawców, w bezpieczny sposób, dzięki czemu możesz je rotować bez edytowania plików YAML potoku.
Mapowanie odwołań do połączeń (obowiązkowe)
Jednym z najczęstszych problemów podczas wdrożeń w Power Platform jest brak powiązania odwołań do połączeń. Po zaimportowaniu rozwiązania do środowiska docelowego każde odwołanie do połączenia musi być powiązane z prawidłowym połączeniem, które istnieje i jest autoryzowane w tym konkretnym środowisku. Zautomatyzuj ten proces, używając interfejsu wiersza poleceń Power Platform (PAC CLI) lub skryptów administracyjnych PowerShell powiązanych ze zmiennymi o zasięgu środowiska.
Migracja danych i konfiguracji
Rozwiązania zawierają metadane i logikę, ale co z danymi referencyjnymi, takimi jak role zabezpieczeń, rekordy konfiguracji czy tabele wyszukiwania? Dane referencyjne i wyszukiwania należy dostarczać za pomocą narzędzia Configuration Migration Tool lub Package Deployer. Zawsze zachowuj ścisłą kolejność ładowania – najpierw tabele nadrzędne, potem podrzędne – i natychmiast po załadowaniu weryfikuj liczbę wierszy oraz wyszukiwania.
Testy dymne, które mają znaczenie
To, że wdrożenie zakończyło się sukcesem, nie oznacza, że aplikacja faktycznie działa. Wdróż zautomatyzowane testy dymne zaraz po zakończeniu zadań wdrożeniowych:
- Uruchom krytyczny przepływ w chmurze z syntetycznym ładunkiem i sprawdź, czy zakończył się sukcesem oraz zwrócił oczekiwane dane wyjściowe.
- Utwórz lub zaktualizuj testowy rekord w Dataverse, aby sprawdzić, czy przepływy procesów biznesowych i wtyczki zostały poprawnie uruchomione.
- Wykonaj wywołanie API typu canary do punktów końcowych właściwych dla środowiska, weryfikując kod stanu 200 OK oraz poprawną strukturę odpowiedzi.
Wycofywanie zmian i odzyskiwanie
Nadzieja nie jest strategią. Jeśli wdrożenie w środowisku produkcyjnym pójdzie źle, potrzebujesz zautomatyzowanej siatki bezpieczeństwa. Przechowuj poprzedni zarządzany plik ZIP rozwiązania jako artefakt w Azure DevOps, aby zadanie awaryjne mogło automatycznie ponownie zaimportować ostatnią znaną dobrą wersję. Pamiętaj, aby przed rozpoczęciem wycofywania zmian zawsze wyłączyć aktywne wyzwalacze i harmonogramy, a ponownie włączyć je dopiero po pomyślnej walidacji.
Minimalny szkielet YAML (koncepcja)
Twój plik YAML potoku nie musi liczyć tysięcy linii. Utrzymuj go modułowy i przejrzysty, koncentrując się na zadaniach podstawowych: parametrach dla nazwy środowiska i rozwiązania, grupach zmiennych dla konfiguracji specyficznych dla środowiska oraz sekwencyjnych zadaniach: eksporcie, publikowaniu i importowaniu zarządzanych rozwiązań, uruchamianiu skryptów zmiennych środowiskowych, mapowaniu połączeń, wykonywaniu testów dymnych i wysyłaniu powiadomień.
Lista kontrolna przed wdrożeniem
Zanim klikniesz ten ostatni przycisk wdrożenia, przejrzyj szybką listę kontrolną, aby upewnić się, że wszystko przebiegnie gładko:
- ✅ Solution Checker nie zwraca żadnych krytycznych problemów.
- ✅ Zmienne środowiskowe są w pełni udokumentowane, a wartości istnieją dla środowiska docelowego.
- ✅ Połączenia docelowe istnieją, a połączenie usługi jest autoryzowane.
- ✅ Pakiety danych referencyjnych są gotowe do użycia.
- ✅ Artefakty wycofania zmian zostały poprawnie zapisane i są dostępne.
- ✅ Okna serwisowe i zatwierdzenia przełożonych dla produkcji są zarezerwowane.
Antywzorce, których należy unikać
Ucz się na błędach innych i dopilnuj, aby te typowe złe nawyki nigdy nie wkradły się do cyklu życia rozwijania rozwiązań:
- Wpisywanie na sztywno adresów URL, poświadczeń lub sekretów bezpośrednio w plikach YAML lub przepływach w chmurze.
- Pomijanie mapowania połączeń w niebezpiecznym założeniu, że „w środowisku deweloperskim działało poprawnie”.
- Wypychanie niezarządzanych rozwiązań bezpośrednio na produkcję bez niezawodnego planu wycofania zmian.
- Ręczne edycje konfiguracji bezpośrednio w środowiskach produkcyjnych, prowadzące do rozbieżności konfiguracji.
- Budowanie jednego, gigantycznego, monolitycznego rozwiązania z „Add Existing everything” i zerową warstwową strukturą.
Szybkie wygrane (w tym tygodniu)
Nie musisz przepisywać całej strategii wdrożeniowej z dnia na dzień. Wybierz jedno lub dwa z tych szybkich usprawnień do wdrożenia w tym tygodniu:
- Utwórz dedykowane grupy zmiennych dla każdego ze swoich środowisk i powiąż je z Azure Key Vault.
- Dodaj do istniejącego potoku wdrożeniowego podstawowe skrypty mapowania połączeń i aktualizacji zmiennych środowiskowych.
- Przechowuj pakiety ZIP rozwiązań jako wersjonowane artefakty potoku i przygotuj podstawowe zadanie wycofania zmian (rollback).
- Dodaj jeden test dymny, który sprawdza najbardziej krytyczny i najcenniejszy biznesowo przepływ w chmurze.
Często zadawane pytania
Czy potrzebuję osobnych potoków dla środowisk TEST i PROD?
Niekoniecznie. Zazwyczaj wystarczy jeden wieloetapowy potok, pod warunkiem że etapy produkcyjne są zabezpieczone ścisłymi ręcznymi zatwierdzeniami, dedykowanymi grupami zmiennych oraz zasadami chronionych gałęzi.
Czy mogę na zawsze uniknąć ręcznej konfiguracji połączeń?
Proces powiązywania można w pełni zautomatyzować, jednak same połączenia muszą istnieć w każdym docelowym środowisku. Zazwyczaj tworzy je administrator jednorazowo, a potem są one już tylko przywoływane.
Rozwiązania zarządzane czy niezarządzane w środowiskach wyższego poziomu?
Zawsze używaj rozwiązań zarządzanych w środowiskach TEST i PROD. Zapewniają one czystą warstwowość, łatwe odinstalowanie oraz przewidywalne, bezbłędne aktualizacje rozwiązań.
Zbudowanie niezawodnego potoku Power Platform wymaga wcześniejszego planowania, ale korzyści w postaci szybszych wdrożeń, stabilności systemu i spokoju zespołu deweloperskiego z nawiązką to rekompensują. Aby posłuchać szczegółowego omówienia tych strategii, koniecznie zapoznaj się z naszym towarzyszącym odcinkiem podcastu Implement Power Platform CI/CD with Azure DevOps. Do usłyszenia następnym razem, automatyzuj dalej i wdrażaj z pewnością!