Zalecenia dotyczące korzystania z ciągłej integracji

Dotyczy tej rekomendacji dotyczącej listy kontrolnej doskonałości operacyjnej platformy Azure Well-Architected Framework:

OE:04 Optymalizowanie procesów tworzenia oprogramowania i zapewniania jakości, postępując zgodnie ze sprawdzonymi w branży rozwiązaniami dotyczącymi programowania i testowania. Aby wyczyścić oznaczenie roli, ustandaryzuj praktyki między składnikami, takimi jak narzędzia, kontrola źródła, wzorce projektowania aplikacji, dokumentacja i przewodniki stylu.

Powiązany przewodnik: Ulepszanie szybkości | kompilacji Standaryzacja narzędzi i procesów

Ponieważ kod jest opracowywany, aktualizowany, a nawet usuwany, ma intuicyjną i bezpieczną metodę integrowania tych zmian w głównej gałęzi kodu, umożliwia deweloperom zapewnienie wartości.

Jako deweloper możesz wprowadzić niewielkie zmiany w kodzie, wypchnąć te zmiany do repozytorium kodu i uzyskać niemal natychmiastową opinię na temat jakości, pokrycia testów i wprowadzonych usterek. Ten proces pozwala pracować szybciej i z większą pewnością i mniejszym ryzykiem.

Ciągła integracja (CI) to praktyka, w której systemy kontroli źródła i potoki wdrażania oprogramowania są zintegrowane w celu zapewnienia zautomatyzowanych mechanizmów kompilowania, testowania i przesyłania opinii dla zespołów programistycznych.

Kluczowe strategie projektowania

Ciągła integracja to praktyka tworzenia oprogramowania używana przez deweloperów do integrowania aktualizacji oprogramowania z systemem kontroli źródła w regularnych okresach.

Proces ciągłej integracji rozpoczyna się, gdy inżynier tworzy żądanie ściągnięcia usługi GitHub, aby sygnalizować system ciągłej integracji, że zmiany kodu są gotowe do zintegrowania. W idealnym przypadku proces integracji weryfikuje kod względem kilku punktów odniesienia i testów. Następnie przekazuje opinię do inżyniera żądającego na temat stanu tych testów.

Jeśli testy bazowe i testowanie są dobrze sprawdzane, proces integracji tworzy zasoby i etapy, które będą wdrażać zaktualizowane oprogramowanie. Te zasoby obejmują skompilowany kod i obrazy kontenerów.

Ciągła integracja może pomóc w szybciej dostarczaniu wysokiej jakości oprogramowania, wykonując następujące czynności:

  • Uruchom zautomatyzowane testy względem kodu, aby zapewnić wczesne wykrywanie zmian powodujących niezgodność.
  • Uruchom analizę kodu, aby zapewnić standardy kodu, jakość i konfigurację.
  • Uruchom testy zgodności i zabezpieczeń, aby upewnić się, że oprogramowanie nie ma znanych luk w zabezpieczeniach.
  • Uruchom testy akceptacyjnych lub funkcjonalnych, aby upewnić się, że oprogramowanie działa zgodnie z oczekiwaniami.
  • Przekaż szybką opinię na temat wykrytych problemów.
  • Jeśli ma to zastosowanie, należy utworzyć możliwe do wdrożenia zasoby lub pakiety, które zawierają zaktualizowany kod.

Potoki ciągłej integracji

Aby osiągnąć ciągłą integrację, użyj rozwiązań oprogramowania 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 zgodności.
  • Reporting.
  • Wszystkie inne składniki tworzące proces ciągłej integracji.

W większości przypadków oprogramowanie potoku jest dołączone do kontroli źródła, tak aby po utworzeniu żądań ściągnięcia lub scalaniu oprogramowania z określoną gałęzią potok ciągłej integracji jest uruchamiany. Integracja kontroli źródła zapewnia również możliwość przekazywania opinii ci bezpośrednio na żądania ściągnięcia.

Wiele rozwiązań, takich jak Azure Pipelines lub GitHub Actions, zapewnia możliwości potoków ciągłej integracji.

Integracja kontroli źródła

Integracja potoku ciągłej integracji z systemem kontroli źródła jest kluczem umożliwiającym szybkie, samoobsługowe współtworzenie kodu.

Potok ciągłej integracji jest uruchamiany w nowo utworzonym żądaniu ściągnięcia. Potok obejmuje wszystkie testy, oceny zabezpieczeń i inne kontrole. Wyniki testu ciągłej integracji są wyświetlane bezpośrednio w żądaniu ściągnięcia, aby umożliwić uzyskanie niemal w czasie rzeczywistym opinii na temat jakości.

Kolejną popularną praktyką jest tworzenie małych raportów lub znaczków, które można przedstawić w kontroli źródła w celu uwidocznienia bieżących stanów kompilacji.

Na poniższej ilustracji przedstawiono integrację między usługą GitHub i potokiem usługi Azure DevOps. W tym przykładzie tworzenie żądania ściągnięcia wyzwala potok usługi Azure DevOps. Stan potoku jest wyświetlany w żądaniu ściągnięcia.

Zrzut ekranu przedstawiający znaczek stanu usługi Azure DevOps w repozytorium GitHub.

Testowanie integracji

Kluczowym elementem ciągłej integracji jest ciągłe tworzenie i testowanie kodu, ponieważ deweloperzy współtworzeją kod. Testowanie żądań ściągnięcia podczas ich tworzenia daje szybką opinię, że zatwierdzenie nie wprowadziło zmian powodujących niezgodność. Zaletą jest to, że testy w potoku ciągłej integracji mogą być tymi samymi testami, które są uruchamiane podczas programowania opartego na testach.

Poniższy fragment kodu przedstawia krok testu z potoku usługi Azure DevOps. Krok zawiera 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 obok kodu języka Python. Wyniki testu przechodzą do pliku o nazwie test-results.xml.
  • Drugie zadanie używa wyników testu i publikuje 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.

Zrzut ekranu przedstawiający testy potoków usługi Azure DevOps w portalu usługi Azure DevOps.

Testy zakończone niepowodzeniem

Testy, które zakończyły się niepowodzeniem, powinny tymczasowo zablokować wdrożenie i prowadzić do dokładniejszej analizy tego, co się stało. Testy nieudane powinny również prowadzić do uściślenia testów lub poprawy zmiany, która spowodowała niepowodzenie testów.

Znaczki wyników ciągłej integracji

Wielu deweloperów pokazuje, że ich 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.

Zrzut ekranu przedstawiający wskaźnik usługi Azure Pipelines w pliku readme w usłudze GitHub.

Ułatwienia platformy Azure

Azure DevOps to kolekcja usług, które ułatwiają tworzenie wspólnej, wydajnej i spójnej praktyki programistycznej.

Usługa Azure Pipelines udostępnia usługi kompilacji i wydawania w celu zapewnienia ciągłej integracji i ciągłego dostarczania (CI/CD) aplikacji.

Usługa GitHub for Actions dla platformy Azure umożliwia automatyzację procesów ciągłej integracji/ciągłego wdrażania. Integruje się bezpośrednio z platformą Azure, aby uprościć wdrożenia. Możesz tworzyć przepływy pracy, które kompilują i testują każde żądanie ściągnięcia w repozytorium lub wdrażają scalone żądania ściągnięcia do środowiska produkcyjnego.

Dowiedz się, jak utworzyć potok ciągłej integracji przy użyciu usługi GitHub lub Azure DevOps:

Dowiedz się, jak wyświetlać znaczki w repozytoriach:

Lista kontrolna doskonałości operacyjnej