(PRZESTARZAŁE) Pełny potok ciągłej integracji/ciągłego wdrażania w celu wdrożenia aplikacji z wieloma kontenerami w usłudze Azure Container Service za pomocą narzędzia Docker Swarm przy użyciu Azure DevOps Services
Ostrzeżenie
Usługa Azure Container Service (ACS) stała się przestarzała. Do usługi ACS nie są już dodawane żadne nowe funkcje. Wszystkie interfejsy API, środowisko portalu, polecenia interfejsu wiersza polecenia i dokumentacja są oznaczone jako przestarzałe.
Aby uzyskać więcej informacji, zobacz ogłoszenie o zakończeniu obsługi usługi Azure Container Service w witrynie Azure.com.
Zalecamy wdrożenie jednego z następujących rozwiązań Azure Marketplace:
- Mesosphere DC/OS
Jeśli chcesz użyć platformy Kubernetes, zobacz Azure Kubernetes Service.
Jednym z największych wyzwań podczas tworzenia nowoczesnych aplikacji dla chmury jest możliwość ciągłego dostarczania tych aplikacji. Z tego artykułu dowiesz się, jak zaimplementować potok pełnej ciągłej integracji i wdrażania (CI/CD) przy użyciu usługi Azure Container Service z rozwiązaniem Docker Swarm, Azure Container Registry i zarządzaniem usługą Azure Pipelines.
Celem jest ciągłe dostarczanie tej aplikacji w klastrze Docker Swarm przy użyciu Azure DevOps Services. Na poniższej ilustracji przedstawiono szczegóły tego potoku ciągłego dostarczania:
Oto krótkie wyjaśnienie kroków:
- Zmiany kodu są zatwierdzane w repozytorium kodu źródłowego (tutaj, GitHub)
- Usługa GitHub wyzwala kompilację w Azure DevOps Services
- Azure DevOps Services pobiera najnowszą wersję źródeł i tworzy wszystkie obrazy, które tworzą aplikację
- Azure DevOps Services wypycha każdy obraz do rejestru platformy Docker utworzonego przy użyciu usługi Azure Container Registry
- Azure DevOps Services wyzwala nową wersję
- Wydanie uruchamia niektóre polecenia przy użyciu protokołu SSH w węźle głównym klastra usługi kontenera platformy Azure
- Program Docker Swarm w klastrze pobiera najnowszą wersję obrazów
- Nowa wersja aplikacji jest wdrażana przy użyciu narzędzia Docker Compose
Wymagania wstępne
Przed rozpoczęciem tego samouczka należy wykonać następujące zadania:
- Utworzenie klastra Swarm usługi kontenera platformy Azure
- Połączenie z klastrem Swarm w usłudze kontenera platformy Azure
- Tworzenie rejestru kontenerów platformy Azure
- Tworzenie Azure DevOps Services organizacji i projektu
- Rozwidlenie repozytorium GitHub na koncie usługi GitHub
Uwaga
Koordynator rozwiązania Docker Swarm w usłudze Azure Container Service korzysta ze starszego autonomicznego rozwiązania Swarm. Obecnie zintegrowany tryb Swarm (na platformie Docker 1.12 lub nowszej) nie jest obsługiwanym koordynatorem w usłudze Azure Container Service. Aby wdrożyć klaster trybu Swarm na platformie Azure, użyj aparatu usługi ACS typu „open source”, szablonu szybkiego startu opracowanego z udziałem społeczności lub rozwiązania Docker w witrynie Azure Marketplace.
Potrzebujesz również maszyny z systemem Ubuntu (14.04 lub 16.04) z zainstalowaną platformą Docker. Ta maszyna jest używana przez Azure DevOps Services podczas procesów usługi Azure Pipelines. Jednym ze sposobów utworzenia tej maszyny jest użycie obrazu dostępnego w Azure Marketplace.
Krok 1. Konfigurowanie organizacji Azure DevOps Services
W tej sekcji skonfigurujesz organizację Azure DevOps Services.
Konfigurowanie agenta kompilacji Azure DevOps Services Linux
Aby utworzyć obrazy platformy Docker i wypchnąć te obrazy do rejestru kontenerów platformy Azure z kompilacji Azure DevOps Services, musisz zarejestrować agenta systemu Linux. Dostępne są następujące opcje instalacji:
Instalowanie rozszerzenia Azure DevOps Services integracji platformy Docker
Firma Microsoft udostępnia rozszerzenie Azure DevOps Services do pracy z platformą Docker w procesach usługi Azure Pipelines. To rozszerzenie jest dostępne w witrynie Azure DevOps Services Marketplace. Kliknij przycisk Zainstaluj, aby dodać to rozszerzenie do organizacji Azure DevOps Services:
Zostanie wyświetlony monit o nawiązanie połączenia z organizacją Azure DevOps Services przy użyciu poświadczeń.
Łączenie Azure DevOps Services i usługi GitHub
Skonfiguruj połączenie między projektem Azure DevOps Services a kontem usługi GitHub.
W projekcie Azure DevOps Services kliknij ikonę Ustawienia na pasku narzędzi i wybierz pozycję Usługi.
Po lewej stronie kliknij pozycję Nowy punkt końcowy> usługiGitHub.
Aby autoryzować Azure DevOps Services do pracy z kontem usługi GitHub, kliknij pozycję Autoryzuj i postępuj zgodnie z procedurą w wyświetlonym oknie.
Łączenie Azure DevOps Services z rejestrem kontenerów platformy Azure i klastrem usługi Azure Container Service
Ostatnimi krokami przed przejściem do potoku ciągłej integracji/ciągłego wdrażania jest skonfigurowanie połączeń zewnętrznych z rejestrem kontenerów i klastrem Docker Swarm na platformie Azure.
W ustawieniach usług projektu Azure DevOps Services dodaj punkt końcowy usługi typu Docker Registry.
W otwartym oknie podręcznym wprowadź adres URL i poświadczenia rejestru kontenerów platformy Azure.
W przypadku klastra Docker Swarm dodaj punkt końcowy typu SSH. Następnie wprowadź informacje o połączeniu SSH klastra Swarm.
Wszystkie konfiguracje są teraz wykonywane. W następnych krokach utworzysz potok ciągłej integracji/ciągłego wdrażania, który kompiluje i wdraża aplikację w klastrze Docker Swarm.
Krok 2. Tworzenie potoku kompilacji
W tym kroku skonfigurujesz potok kompilacji dla projektu Azure DevOps Services i zdefiniuj przepływ pracy kompilacji dla obrazów kontenerów
Początkowa konfiguracja potoku
Aby utworzyć potok kompilacji, połącz się z projektem Azure DevOps Services i kliknij pozycję Kompiluj & Wydanie.
W sekcji Definicje kompilacji kliknij pozycję + Nowy. Wybierz szablon Pusty .
Skonfiguruj nową kompilację przy użyciu źródła repozytorium GitHub, sprawdź ciągłą integrację i wybierz kolejkę agenta, w której zarejestrowano agenta systemu Linux. Kliknij przycisk Utwórz , aby utworzyć potok kompilacji.
Na stronie Definicje kompilacji najpierw otwórz kartę Repozytorium i skonfiguruj kompilację tak, aby korzystała z rozwidlenia projektu MyShop utworzonego w wymaganiach wstępnych. Upewnij się, że jako gałąź Domyślna wybrano pozycję acs-docs.
Na karcie Wyzwalacze skonfiguruj kompilację, która ma zostać wyzwolona po każdym zatwierdzaniu. Wybierz pozycję Ciągła integracja i zmiany usługi Batch.
Definiowanie przepływu pracy kompilacji
Następne kroki definiują przepływ pracy kompilacji. Istnieje pięć obrazów kontenerów do skompilowania dla aplikacji MyShop . Każdy obraz jest kompilowany przy użyciu pliku Dockerfile znajdującego się w folderach projektu:
- ProductsApi
- Serwer proxy
- RatingsApi
- ZaleceniaApi
- ShopFront
Musisz dodać dwa kroki platformy Docker dla każdego obrazu, jeden, aby skompilować obraz, i jeden, aby wypchnąć obraz w rejestrze kontenerów platformy Azure.
Aby dodać krok w przepływie pracy kompilacji, kliknij pozycję + Dodaj krok kompilacji i wybierz pozycję Docker.
Dla każdego obrazu skonfiguruj jeden krok, który używa
docker build
polecenia .W przypadku operacji kompilacji wybierz rejestr kontenerów platformy Azure, akcję Utwórz obraz i plik Dockerfile definiujący każdy obraz. Ustaw kontekst kompilacji jako katalog główny pliku Dockerfile i zdefiniuj nazwę obrazu.
Jak pokazano na poprzednim ekranie, uruchom nazwę obrazu z identyfikatorem URI rejestru kontenerów platformy Azure. (Możesz również użyć zmiennej kompilacji do sparametryzowania tagu obrazu, takiego jak identyfikator kompilacji w tym przykładzie).
Dla każdego obrazu skonfiguruj drugi krok, który używa
docker push
polecenia .W przypadku operacji wypychania wybierz rejestr kontenerów platformy Azure, akcję Wypychanie obrazu i wprowadź nazwę obrazu wbudowaną w poprzednim kroku.
Po skonfigurowaniu kroków kompilacji i wypychania dla każdego z pięciu obrazów dodaj dwa kolejne kroki w przepływie pracy kompilacji.
a. Zadanie wiersza polecenia, które używa skryptu powłoki bash do zastąpienia wystąpienia BuildNumber w pliku docker-compose.yml bieżącym identyfikatorem kompilacji. Aby uzyskać szczegółowe informacje, zobacz następujący ekran.
b. Zadanie, które odrzuca zaktualizowany plik Compose jako artefakt kompilacji, aby można było go użyć w wydaniu. Aby uzyskać szczegółowe informacje, zobacz następujący ekran.
Kliknij pozycję Zapisz i nadaj nazwę potokowi kompilacji.
Krok 3. Tworzenie potoku wydania
Azure DevOps Services umożliwia zarządzanie wydaniami w różnych środowiskach. Możesz włączyć ciągłe wdrażanie, aby upewnić się, że aplikacja jest wdrażana w różnych środowiskach (takich jak tworzenie, testowanie, przedprodukcyjne i produkcyjne) w płynny sposób. Możesz utworzyć nowe środowisko reprezentujące klaster Docker Swarm usługi Azure Container Service.
Początkowa konfiguracja wydania
Aby utworzyć potok wydania, kliknij pozycję Wydania>+ Wydanie
Aby skonfigurować źródło artefaktu, kliknij pozycję Artefakty>Połącz źródło artefaktu. W tym miejscu połącz ten nowy potok wydania z kompilacją zdefiniowaną w poprzednim kroku. Dzięki temu plik docker-compose.yml jest dostępny w procesie wydania.
Aby skonfigurować wyzwalacz wydania, kliknij pozycję Wyzwalacze i wybierz pozycję Ciągłe wdrażanie. Ustaw wyzwalacz w tym samym źródle artefaktu. To ustawienie gwarantuje, że nowa wersja zostanie uruchomiona zaraz po pomyślnym zakończeniu kompilacji.
Definiowanie przepływu pracy wydania
Przepływ pracy wydania składa się z dwóch zadań, które dodajesz.
Skonfiguruj zadanie, aby bezpiecznie skopiować plik compose do folderu deploy w węźle głównym platformy Docker Swarm przy użyciu wcześniej skonfigurowanego połączenia SSH. Aby uzyskać szczegółowe informacje, zobacz następujący ekran.
Skonfiguruj drugie zadanie, aby wykonać polecenie powłoki bash w celu uruchomienia
docker
poleceń idocker-compose
w węźle głównym. Aby uzyskać szczegółowe informacje, zobacz następujący ekran.Polecenie wykonane na serwerze głównym używa interfejsu wiersza polecenia platformy Docker i interfejsu wiersza polecenia Docker-Compose do wykonywania następujących zadań:
Zaloguj się do rejestru kontenerów platformy Azure (używa trzech zmiennych kompilacji zdefiniowanych na karcie Zmienne )
Zdefiniuj zmienną DOCKER_HOST do pracy z punktem końcowym Swarm (:2375)
Przejdź do folderu deploy utworzonego przez poprzednie zadanie bezpiecznego kopiowania i zawierającego plik docker-compose.yml
Wykonaj
docker-compose
polecenia, które ściągają nowe obrazy, zatrzymują usługi, usuwają usługi i tworzą kontenery.Ważne
Jak pokazano na poprzednim ekranie, pozostaw niezaznaczone pole wyboru Fail on STDERR (Niepowodzenie w narzędziu STDERR ). Jest to ważne ustawienie, ponieważ
docker-compose
drukuje kilka komunikatów diagnostycznych, takich jak kontenery są zatrzymywane lub usuwane, na standardowych danych wyjściowych błędów. Jeśli zaznaczysz to pole wyboru, Azure DevOps Services zgłasza, że podczas wydania wystąpiły błędy, nawet jeśli wszystko działa prawidłowo.
Zapisz ten nowy potok wydania.
Uwaga
To wdrożenie obejmuje pewien przestój, ponieważ zatrzymujemy stare usługi i uruchamiamy nową. Można tego uniknąć, wykonując wdrożenie niebiesko-zielone.
Krok 4. Testowanie potoku ciągłej integracji/ciągłego wdrażania
Teraz, po zakończeniu pracy z konfiguracją, nadszedł czas na przetestowanie nowego potoku ciągłej integracji/ciągłego wdrażania. Najprostszym sposobem testowania jest zaktualizowanie kodu źródłowego i zatwierdzenie zmian w repozytorium GitHub. Kilka sekund po wypchnięciu kodu zostanie wyświetlona nowa kompilacja uruchomiona w Azure DevOps Services. Po pomyślnym zakończeniu zostanie wyzwolona nowa wersja i wdroży nową wersję aplikacji w klastrze usługi Azure Container Service.
Następne kroki
- Aby uzyskać więcej informacji na temat ciągłej integracji/ciągłego wdrażania za pomocą Azure DevOps Services, zobacz artykuł Azure Pipelines Documentation (Dokumentacja usługi Azure Pipelines).