Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W miarę opracowywania, aktualizowania, a nawet usuwania kodu, posiadanie intuicyjnej i bezpiecznej metody integrowania tych zmian w głównej gałęzi kodu umożliwia deweloperom zapewnienie wartości.
Jako deweloper możesz wprowadzać małe zmiany w kodzie, wprowadzać je do repozytorium kodu i otrzymać prawie błyskawiczne opinie na temat jakości, testów zapotrzebowania i wprowadzonych zmian. Pozwala on pracować szybciej i przy większej pewności siebie oraz zmniejszyć ryzyko.
Ciągła integracja (CI) to praktyka polegająca na integrowaniu systemów kontroli wersji i procesów wdrażania oprogramowania, aby zapewnić zautomatyzowane mechanizmy kompilacji, testowania i przesyłania opinii dla zespołów programistycznych.
Proces integracji jest rozpoczynany w momencie, gdy inżynier tworzy żądanie GitHub do zasygnalizowania systemu CI, że zmiany kodu są gotowe do integracji. Najlepiej jest, aby proces integracji sprawdzał poprawność kodu w kilku planach bazowych i testach. Następnie dostarcza inżynierowi informacji na temat stanu tych testów.
Jeśli kontrole bazowe i testowanie przebiegają dobrze, proces integracji tworzy zasoby i przygotowanie przeznaczone do wdrożenia zaktualizowanego oprogramowania. Zasoby te obejmują skompilowane obrazy kodu i kontenerów.
Ich integracja z programem o wysokiej jakości może ułatwić szybkie dostarczanie wysokiej jakości oprogramowania, wykonując następujące czynności:
- Uruchom zautomatyzowane testy dla kodu w celu zapewnienia wczesnego wykrywania zerwanych zmian.
- Uruchom analizę kodu, aby zapewnić standardy, jakość i konfigurację kodu.
- Uruchom testy zgodności i zabezpieczeń, aby upewnić się, że oprogramowanie nie ma znanych luk w zabezpieczeniach.
- Uruchom testy akceptacji lub funkcjonalności, aby upewnić się, że oprogramowanie działa zgodnie z oczekiwaniami.
- Szybkie opinie na temat wykrytych problemów.
- W odpowiednich przypadkach należy utworzyć wdrażane zasoby lub pakiety, które zawierają zaktualizowany kod.
Automatyzacja ciągłej integracji z przepływami pracy
Aby osiągnąć ciągłą integrację, użyj rozwiązań programowych do zarządzania, integrowania i automatyzowania procesu. Typowym rozwiązaniem jest użycie potoku ciągłej integracji.
Potok ciągłej integracji obejmuje oprogramowanie (często hostowane w chmurze), które zapewnia:
- Platforma do uruchamiania testów automatycznych.
- Skanowanie pod kątem zgodności.
- Raportowanie.
- Wszystkie inne składniki tworzące proces ciągłej integracji.
W większości przypadków oprogramowanie potoku jest dołączone do systemu kontroli wersji, tak że po utworzeniu żądania zatwierdzenia lub scaleniu oprogramowania z określoną gałęzią, potok ciągłej integracji jest uruchamiany automatycznie. Integracja z kontrolą źródła umożliwia również bezpośrednie opinie CI na temat zapytań pull.
Wiele rozwiązań, takich jak Azure Pipelines lub GitHub Actions, zapewnia funkcje potoków stałej integracji.
Integrowanie potoków z kontrolą źródła
Integracja potoku stałej integracji z systemem kontroli źródłowej ma kluczowe znaczenie dla szybkiego i samoobsługowego opłacania kodu.
Potok CI jest uruchamiany na nowo utworzonego żądania pull. Potok obejmuje wszystkie testy, oceny zabezpieczeń i inne sprawdzenia. Wyniki testów CI są wyświetlane bezpośrednio w żądaniu pull, aby umożliwić zgłoszenie opinii w czasie rzeczywistym na temat jakości.
Inną popularną praktyką jest tworzenie niewielkich raportów lub znaczek, które można prezentować w kontrolce źródłowej w celu prezentowania bieżącego stany kompilacji.
Na poniższym obrazie pokazano integrację między relacją GitHub a potokiem Azure DevOps. W tym przykładzie pull request wyzwala pipeline Azure DevOps. Stan potoku jest wyświetlany w żądaniu pull.
Dołączanie testów automatycznych
Kluczowym elementem stałej integracji jest ciągły proces tworzenia i testowania kodu, gdy deweloperzy podają informacje o kodach. Testowanie pull requestów podczas ich tworzenia daje szybką informację zwrotną, że commit nie wprowadził zmian powodujących awarie. Zaletą jest to, że testy w ramach potoku integracji ciągłych mogą być tym samym testami przeprowadzonymi podczas projektowania opartego na testach.
Poniższy fragment kodu przedstawia krok testu z potoku usługi Azure DevOps. Krok ma dwa zadania:
- Pierwsze zadanie używa popularnej platformy testowania języka Python do uruchamiania testów ciągłej integracji. Te testy znajdują się w kontroli źródła wraz z kodem języka Python. Wyniki testu przechodzą do pliku o nazwie test-results.xml.
- Drugie zadanie przetwarza wyniki testu i udostępnia je w potoku usługi Azure DevOps jako zintegrowany raport.
- script: |
pip3 install pytest
pytest azure-vote/azure-vote/tests/ --junitxml=junit/test-results.xml
continueOnError: true
- task: PublishTestResults@2
displayName: 'Publish Test Results'
inputs:
testResultsFormat: 'JUnit'
testResultsFiles: '**/test-results.xml'
failTaskOnFailedTests: true
testRunTitle: 'Python $(python.version)'
Na poniższej ilustracji przedstawiono wyniki testów wyświetlane w portalu usługi Azure DevOps.
Testy zakończone niepowodzeniem
Nieudane testy powinny tymczasowo blokować wdrożenie i prowadzić do głębszej analizy tego, co trzeba będzie zrobić. Nieudane testy powinny również doprowadzić do uściślienia testów lub usprawnienia zmiany, która spowodowała niepowodzenie testów.
Opublikuj status kompilacji
Wielu deweloperów pokazuje, że jakość kodu jest wysoka, wyświetlając wskaźnik stanu w repozytorium. Na poniższej ilustracji przedstawiono wskaźnik usługi Azure Pipelines wyświetlany w pliku readme projektu open source w usłudze GitHub.
Optymalizowanie czasów kompilacji
Aby szybciej wykonywać kompilacje, możesz wykonywać następujące czynności:
Wybierz agentów spełniających wymagania dotyczące wydajności: Przyspiesz kompilacje, wybierając odpowiednie maszyny kompilacji. Szybkie maszyny mogą mieć różnicę między godzinami i minutami. Jeśli potoki znajdują się w usłudze Azure Pipelines, możesz uruchamiać zadania przy użyciu agenta udostępnionego przez firmę Microsoft. W przypadku korzystania z agentów hostowanych przez firmę Microsoft konserwacja i uaktualnienia są wykonywane dla Ciebie. Aby uzyskać więcej informacji, zobacz Agenci hostowani przez firmę Microsoft.
Zoptymalizuj lokalizację serwera kompilacji: podczas kompilowania kodu dane są wysyłane przez sieć. Dane wejściowe kompilacji są pobierane z repozytorium kontroli źródła i repozytorium artefaktów. Dane wyjściowe z procesu kompilacji należy skopiować, w tym skompilowane artefakty, raporty testowe, wyniki pokrycia kodu i symbole debugowania. Ważne jest, aby te akcje kopiowania były uruchamiane szybko. Jeśli używasz własnego serwera kompilacji, upewnij się, że serwer kompilacji znajduje się w pobliżu źródeł i lokalizacji docelowej. Szybkie przekazywanie i pobieranie może skrócić całkowity czas kompilacji.
Skalowanie serwerów kompilacji w poziomie: Pojedynczy serwer kompilacji może być wystarczający dla małego produktu. W miarę wzrostu rozmiaru i zakresu produktu oraz liczby zespołów pracujących nad produktem pojedynczy serwer może nie być wystarczający. Skaluj infrastrukturę poziomo na wielu maszynach, gdy osiągniesz limit. Aby uzyskać więcej informacji, zobacz Tworzenie pul agentów i zarządzanie nimi.
Optymalizowanie kompilacji:
Dodaj zadania równoległe, aby przyspieszyć proces kompilacji. Aby uzyskać więcej informacji, zobacz Konfigurowanie zadań równoległych i płacenie za nie.
Włącz równoległe przebiegi zestawu testów, które często oszczędzają dużo czasu, zwłaszcza podczas uruchamiania testów integracji i interfejsu użytkownika. Aby uzyskać więcej informacji, zobacz Uruchom testy równolegle w dowolnym programie uruchamiającym testy.
Użyj pojęcia mnożnika, za pomocą którego można skalować projekty na wielu agentów budowy. Aby uzyskać więcej informacji, zobacz Określanie zadań w Twoim potoku.
Rozważ przeniesienie testów integracyjnych, testów interfejsu użytkownika i testów podstawowych do pipeline'u wydania. Przejście do potoku wdrożeniowego poprawia szybkość kompilacji oraz szybkość pętli zwrotu informacji o kompilacji.
Opublikuj artefakty kompilacji w rozwiązaniu do zarządzania pakietami, takim jak NuGet lub Maven. Publikowanie w rozwiązaniu do zarządzania pakietami umożliwia łatwiejsze ponowne użycie artefaktu kompilacji.
Implementowanie typów kompilacji w celu dopasowania do przepływów pracy
Twoja organizacja może zdecydować się na utworzenie kilku różnych rodzajów kompilacji w celu zoptymalizowania czasów kompilacji. Możliwe kompilacje obejmują:
Kompilacja ciągłej integracji: celem tej kompilacji jest upewnienie się, że kod jest kompilowany, a testy jednostkowe są uruchamiane. Ta kompilacja jest wyzwalana przy każdym zatwierdzeniu. Służy on jako puls projektu i natychmiast przekazuje zespołowi opinię na temat jakości. Aby uzyskać więcej informacji, zobacz Określanie zdarzeń uruchamiających potoki.
Kompilacja nocna: Celem nocnej kompilacji jest nie tylko skompilowanie kodu, ale także zapewnienie większych zestawów testów, które są nieefektywne, uruchamiane regularnie dla każdej kompilacji. Zazwyczaj te testy obejmują testy integracyjne, testy interfejsu użytkownika lub testy dymne. Aby uzyskać więcej informacji, zobacz Konfigurowanie harmonogramów dla potoków.
Kompilacja wydania: oprócz kompilowania i uruchamiania testów ta kompilacja generuje także dokumentację API, raporty zgodności, podpisywanie kodu oraz inne kroki, które nie są wymagane za każdym razem, gdy kod jest kompilowany. Ta kompilacja dostarcza ostateczną wersję, przesyłaną do potoku wydania w celu wdrożenia jej w środowisku produkcyjnym.
Typy kompilacji wymaganych przez organizację zależą od czynników, w tym dojrzałości zespołu i organizacji, rodzaju produktu, nad którym pracujesz, oraz strategii wdrażania.
Powiązane linki
Dowiedz się, jak utworzyć pipeline ciągłej integracji przy użyciu GitHub lub Azure DevOps.
Dowiedz się, jak wyświetlać znaczki w repozytoriach: