Azure Pipelines
Automatyzacja budowania, testowania i wdrażania aplikacji
Czym jest Azure Pipelines?
- usługa Azure DevOps do automatyzacji procesów CI/CD
- buduje, testuje i wdraża aplikacje na różnych platformach
- obsługuje aplikacje webowe, desktopowe i mobilne
- umożliwia wdrożenia do chmury oraz środowisk lokalnych (on-premises)
- potoki mogą korzystać z agentów hostowanych przez Microsoft lub utrzymywanych samodzielnie
CI i CD
- CI - continuous integration (ciągła integracja): częste integrowanie zmian, automatyczne budowanie i testowanie kodu
- CD - continuous delivery (ciągłe dostarczanie): automatyczne przygotowanie i dostarczanie kolejnych wersji aplikacji
- potok może wdrażać aplikację na kolejne środowiska, np. testowe i produkcyjne
- automatyzacja pozwala szybciej wykrywać błędy i powtarzalnie wykonywać czynności
Typowy przebieg potoku
- zmiana kodu w repozytorium
- uruchomienie potoku
- zbudowanie aplikacji i wykonanie testów
- przygotowanie wyników budowania do wdrożenia
- wdrożenie na środowisko testowe, a następnie produkcyjne
- sprawdzenie wyników, raportów i stanu wdrożenia
Etapy i sposób uruchamiania zależą od konfiguracji projektu.
Elementy potoku
- pipeline - definicja zautomatyzowanego procesu
- stage - etap procesu, np. budowanie lub wdrożenie
- job - grupa kroków wykonywana przez agenta
- step - pojedynczy krok, np. skrypt lub gotowe zadanie
- agent - środowisko wykonujące zadania potoku
- potok można zdefiniować w pliku YAML przechowywanym w repozytorium
Agenty i systemy operacyjne
- agenty hostowane przez Microsoft ograniczają potrzebę samodzielnego zarządzania maszynami
- własne agenty (self-hosted) pozwalają utrzymywać środowisko wykonawcze we własnej infrastrukturze
- dostępne są środowiska Linux, macOS i Windows
- zadania i testy mogą działać równolegle, co przy odpowiednich zasobach skraca czas oczekiwania
- dostępna równoległość i koszty zależą od wybranej oferty
Języki, platformy, kontenery
- budowanie, testowanie i wdrażanie aplikacji w wielu technologiach
- przykłady: Node.js, Python, Java, PHP, Ruby, C/C++ i .NET
- obsługa aplikacji Android i iOS
- możliwość uruchamiania zadań na różnych systemach operacyjnych
- budowanie obrazów kontenerów i publikowanie ich w rejestrach, np. Docker Hub i Azure Container Registry
- wdrażanie kontenerów na pojedyncze hosty lub do Kubernetes
Wdrażanie aplikacji i integracja
- wdrożenia m.in. do Azure, AWS i Google Cloud oraz środowisk lokalnych
- przykładowe cele: Kubernetes, maszyny wirtualne, Azure Functions i Azure Web Apps
- możliwe wdrażanie wyników pochodzących z innych systemów CI, np. Jenkins
- integracja z GitHub: umożliwia automatyczne uruchamianie potoków w odpowiedzi na zdarzenia w repozytorium GitHub
- wtyczki rozszerzające, integracja raportowania z m.in. Slack i SonarCloud
Przykład potoku YAML
Plik azure-pipelines.yml dla repozytorium zawierającego projekt .NET w katalogu głównym:
trigger: - main pool: vmImage: ubuntu-latest steps: - task: UseDotNet@2 inputs: version: 8.x - script: dotnet build --configuration Release displayName: Budowanie - script: dotnet test --configuration Release displayName: Testy
Jak działa przykład?
- zmiana w gałęzi
mainuruchamia potok - zadanie wykonywane jest na agencie Microsoft-hosted z systemem Ubuntu
- krok
UseDotNet@2udostępnia wskazaną wersję .NET SDK - kolejne kroki budują projekt i uruchamiają testy
- przykład nie zawiera wdrożenia; można dodać je jako kolejny etap
Podsumowanie
- Azure Pipelines automatyzuje budowanie, testowanie i wdrażanie
- obsługuje różne języki, systemy operacyjne, kontenery i środowiska chmurowe
- etapy, warunki i zatwierdzenia pomagają kontrolować proces dostarczania
- YAML, integracja z GitHub i rozszerzenia ułatwiają dopasowanie potoku do projektu