(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:

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.

Przykładowa aplikacja MyShop

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:

Przykładowa aplikacja MyShop

Oto krótkie wyjaśnienie kroków:

  1. Zmiany kodu są zatwierdzane w repozytorium kodu źródłowego (tutaj, GitHub)
  2. Usługa GitHub wyzwala kompilację w Azure DevOps Services
  3. Azure DevOps Services pobiera najnowszą wersję źródeł i tworzy wszystkie obrazy, które tworzą aplikację
  4. Azure DevOps Services wypycha każdy obraz do rejestru platformy Docker utworzonego przy użyciu usługi Azure Container Registry
  5. Azure DevOps Services wyzwala nową wersję
  6. Wydanie uruchamia niektóre polecenia przy użyciu protokołu SSH w węźle głównym klastra usługi kontenera platformy Azure
  7. Program Docker Swarm w klastrze pobiera najnowszą wersję obrazów
  8. 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:

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:

Instalowanie integracji platformy Docker

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.

  1. W projekcie Azure DevOps Services kliknij ikonę Ustawienia na pasku narzędzi i wybierz pozycję Usługi.

    Azure DevOps Services — połączenie zewnętrzne

  2. Po lewej stronie kliknij pozycję Nowy punkt końcowy> usługiGitHub.

    Azure DevOps Services — GitHub

  3. 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.

    Azure DevOps Services — autoryzowanie usługi GitHub

Łą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.

  1. W ustawieniach usług projektu Azure DevOps Services dodaj punkt końcowy usługi typu Docker Registry.

  2. W otwartym oknie podręcznym wprowadź adres URL i poświadczenia rejestru kontenerów platformy Azure.

    Azure DevOps Services — rejestr platformy Docker

  3. W przypadku klastra Docker Swarm dodaj punkt końcowy typu SSH. Następnie wprowadź informacje o połączeniu SSH klastra Swarm.

    Azure DevOps Services — SSH

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

  1. Aby utworzyć potok kompilacji, połącz się z projektem Azure DevOps Services i kliknij pozycję Kompiluj & Wydanie.

  2. W sekcji Definicje kompilacji kliknij pozycję + Nowy. Wybierz szablon Pusty .

    Azure DevOps — nowy potok kompilacji

  3. 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.

    Azure DevOps Services — tworzenie potoku kompilacji

  4. 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.

    Azure DevOps Services — konfiguracja repozytorium kompilacji

  5. 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.

    Azure DevOps Services — konfiguracja wyzwalacza kompilacji

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.

  1. Aby dodać krok w przepływie pracy kompilacji, kliknij pozycję + Dodaj krok kompilacji i wybierz pozycję Docker.

    Azure DevOps Services — dodawanie kroków kompilacji

  2. Dla każdego obrazu skonfiguruj jeden krok, który używa docker build polecenia .

    Azure DevOps Services — kompilacja platformy Docker

    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).

  3. Dla każdego obrazu skonfiguruj drugi krok, który używa docker push polecenia .

    Azure DevOps Services — wypychanie platformy Docker

    W przypadku operacji wypychania wybierz rejestr kontenerów platformy Azure, akcję Wypychanie obrazu i wprowadź nazwę obrazu wbudowaną w poprzednim kroku.

  4. 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.

    Azure DevOps Services — plik Update Compose

    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.

    Azure DevOps Services — publikowanie pliku compose

  5. 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.

Azure DevOps Services — wydanie do usługi ACS

Początkowa konfiguracja wydania

  1. Aby utworzyć potok wydania, kliknij pozycję Wydania>+ Wydanie

  2. 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.

    Azure DevOps Services — artefakty wydania

  3. 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.

    Azure DevOps Services — wyzwalacze wydania

Definiowanie przepływu pracy wydania

Przepływ pracy wydania składa się z dwóch zadań, które dodajesz.

  1. 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.

    Azure DevOps Services — zwolnij punkt połączenia usługi

  2. Skonfiguruj drugie zadanie, aby wykonać polecenie powłoki bash w celu uruchomienia docker poleceń i docker-compose w węźle głównym. Aby uzyskać szczegółowe informacje, zobacz następujący ekran.

    Azure DevOps Services — wydanie powłoki Bash

    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.

  3. 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