Azure DevOps Library backup

Na dzisiaj w Azure nie mamy natywnego sposobu na backupowanie zasobów typu Library w Azure DevOps.
Jak temu zaradzić?

Instalacja AZ CLI

Rozwiązaniem stosowanym przeze mnie jest wykorzystanie powershella i modułu AZ.
Niestety komendy którymi się posługuję są obecnie w wersji 'preview’, tj. mogą się kiedyś zmienić i działać inaczej lub przyjmować inne parametry.

W pierwszej kolejności instalujemy u siebie odpowiedni moduł powershella:

Następnie uwierzytelniamy się w Azure naszym kontem:

Wylistowanie Library

Pierwsze co zróbmy to sprawdźmy jakie pozycje mamy w Library. Do tego potrzebujemy znać nazwę naszej organizacji i projektu. Odczytujemy to logując się do https://dev.azure.com

Następnie po wejściu w Azure DevOps w lewym menu wybieramy organizację a w prawym oknie mamy projekty.

Główna strona Azure DevOps - wybór organizacji i projektu
Główna strona Azure DevOps – wybór organizacji i projektu

Za pomocą komendy poniżej listujemy wszystkie pozycje w Library:

Azure DevOps Library list

Mam zasadę, że dla każdej aplikacji (razy ilość środowisk) mam osobne ustawienia dla IISa, SQLa i samej aplikacji. Trzymam konfiguracje wszystkich aplikacji, których dystrybucja odbywa się z użyciem Continous Deployment obsługiwanym przez Azure.

Dla kilkunastu aplikacji lista robi się już długa.

Pobranie pojedynczych ustawień

Jeżeli potrzebujemy pobrać ustawienia tylko dla jednego elementu z Library, to potrzebujemy jego numeru ID, który uzyskaliśmy wyżej. Np. dla ID 6 ustawienia pobierzemy za pomocą polecenia:

Wynikiem tego polecenia będzie wynik w formacie JSON który możemy zapisać w formie pliku – to jest nasz backup.
Uwaga. Jeżeli wartość była oznaczone jako 'Secret’, nie wyciągniemy jej wartości. Warto mieć to na względzie i wszelkie hasła i tokeny trzymać w niezależnym i bezpiecznym miejscu.

Pobranie wszystkich ustawień i zapis do plików

Jak mamy kilka pozycji w Library to możemy skorzystać z polecania powyżej i ręcznie wyciągać wartości dla wszystkich ustawień. Jeżeli jest ich więcej, lepiej jest przeiterować się pętlą po wszystkich pozycjach i zapisać je do plików.

A co z odtwarzaniem?

Na razie nie miałem czasu do tego usiąść. Backupy do tej pory potrzebowałem tylko na zasadzie „A co było tam ustawione miesiąc temu, że teraz nie działa?”.

Znalazłem, że ktoś już napisał skrypt odtwarzający wpisy z Library, ale jako wejście przyjmuje plik CSV, a nie JSON (prawie na pewno da się zastosować bez zmian, tylko trzeba przetransponować JSONa na CSV):

https://www.powershellgallery.com/packages/Posh-AzureDevOps/1.0.7/Content/modules%5CLibraries%5CImport-AzDoVariableGroupVariables.psm1

https://github.com/ravensorb/Posh-AzureDevOps

Szybka instalacja kontrolera domeny Active Directory

Czasami na szybko potrzebujemy postawić maszynę wirtualną i skonfigurować na niej domenę. Całkiem sporo klikania które da się uprościć.

Nawet jak nie robimy tego na szybko, a ze względów na plan Disaster Recovery potrzebujemy mieć wszystko opisane jako kod, poniższe komendy mogą się przydać.

Na początku potrzebujemy postawić najprostszą możliwą maszynę wirtualną, np. Windows Server 2019 w wersji Core. Zwykle takiego typu maszynom ustawiam 2 procesory i kilka GB pamięci przydzielanej dynamicznie (w praktyce zwykle taka maszyna zużywa w okolicach 1 GB. Następnie uruchamiamy:

Instalacja wymaganych komponentów

Konfiguracja Active Directory

W czasie instalacji musimy tylko podać hasło do odzyskiwania domeny i po paru chwilach wszystko gotowe.

Warto zadbać żeby kontroler domeny miał stały adres IP, ponieważ wszystkie maszyny dołączane do domeny powinny korzystać z DNS zainstalowanego na kontrolerze domeny.

Weryfikację instalacji możemy wykonać komendą:

Konfiguracja sieci Hyper-V dla środowiska PoC (Hyper-V IaaC cz. 1)

Budując kolejne środowisko Proof of Concept (PoC) stanąłem przed wyzwaniem by był ono uniezależnione od wszystkich innych maszyn wirtualnych. To co udało się osiągnąć, to również szybki sposób na budowanie kolejnych sieci bez ryzyka, że wyczerpiemy pulę adresów IP w lokalnej sieci (często na 24 bitach, a jak zaczniemy się bawić w kontenery albo inne automaty to się okazuje, że to nie problem wysycić taki zapas adresów).

Punkt wejścia to posiadanie systemy Windows 10 Pro z zainstalowanym Hyper-V. Na Windows Server możemy zrobić to samo, ale w tym przypadku stawiam wszystko na systemie klienckim.

Konfiguracja switcha

Wpierw tworzymy switch typu internal. Takie rozwiązanie umożliwi nam bezproblemową komunikację wew. tworzonego środowiska, dostęp z wewnątrz do Internetu, oraz dostęp z hosta do usług które budujemy w warstwie wirtualizacji.

Zaczynamy od utworzenie switcha, np. o nazwie PocSwitchTest:

Konfiguracja NAT

Następnie żeby zapewnić komunikację o której wspomniałem wyżej, konfigurujemy zakres sieci (w gratisie mamy DHCP i DNS) i rezerwujemy pierwszy adres sieci dla naszego hosta – którym jest lokalny komputer z Hyper-V:

W tym przypadku zrobiłem sieć 192.168.123.0/24, ale to może być dowolna inna byle nie kolidowała z naszą fizyczną i innymi wirtualnymi sieciami.

Tworzenie switcha nie zrywa żadnego połączenia, można to robić łącząc się zdalnie do danej maszyny.

Gdybyśmy chcieli posprzątać, to dwie komendy (zakładając że do utworzonego switcha nic nie podłączyliśmy).

Podsumowanie

Tworząc maszyny wirtualne przypinamy je do utworzonego switcha i cieszymy się działającą siecią (jedna z innych sieci o nazwie PocSwitch i adresacji 192.168.0.0/24).

I widok z wewnątrz utworzonej maszyny wirtualnej (maszyna ma dwa adresy IP .110 i .111, brama wskazuje na adres .1 przypisany do maszyny-hosta):