Udostępnij za pośrednictwem


Ciągła integracja i ciągłe wdrażanie na urządzeniach usługi Azure IoT Edge (edytor klasyczny)

Dotyczy: Znacznik wyboru usługi IoT Edge 1.4 IoT Edge 1.4

Ważne

Obsługiwane są wersje usługi IoT Edge 1.5 LTS i IoT Edge 1.4. Jeśli korzystasz z wcześniejszej wersji, zobacz aktualizację Azure IoT Edge.

Usługa Azure Pipelines obejmuje wbudowane zadanie usługi Azure IoT Edge, które pomaga wdrożyć metodykę DevOps z aplikacjami usługi Azure IoT Edge. W tym artykule pokazano, jak używać funkcji ciągłej integracji i ciągłego wdrażania usługi Azure Pipelines do szybkiego i wydajnego kompilowania, testowania i wdrażania aplikacji w usłudze Azure IoT Edge przy użyciu edytora klasycznego. Alternatywnie możesz użyć języka YAML.

Diagram przedstawiający gałęzie ciągłej integracji i ciągłego programowania na potrzeby programowania i produkcji.

Z tego artykułu dowiesz się, jak używać wbudowanych zadań usługi Azure IoT Edge dla usługi Azure Pipelines do tworzenia potoków kompilacji i wydawania dla rozwiązania usługi IoT Edge. Każde zadanie usługi Azure IoT Edge dodane do potoku implementuje jedną z następujących czterech akcji:

Akcja opis
Kompilowanie obrazów modułów Pobiera kod rozwiązania usługi IoT Edge i tworzy obrazy kontenerów.
Wypychanie obrazów modułów Wypycha obrazy modułów do określonego rejestru kontenerów.
Generowanie manifestu wdrożenia Pobiera plik deployment.template.json i zmienne, a następnie generuje końcowy plik manifestu wdrożenia usługi IoT Edge.
Wdrażanie na urządzeniach usługi IoT Edge Tworzy wdrożenia usługi IoT Edge na co najmniej jednym urządzeniu usługi IoT Edge.

O ile nie określono inaczej, procedury opisane w tym artykule nie eksplorują wszystkich funkcji dostępnych za pomocą parametrów zadania. Aby uzyskać więcej informacji, zobacz następujące zasoby:

Wymagania wstępne

  • Repozytorium usługi Azure Repos. Jeśli go nie masz, możesz utworzyć nowe repozytorium Git w projekcie. W tym artykule utworzyliśmy repozytorium o nazwie IoTEdgeRepo.

  • Rozwiązanie usługi IoT Edge zostało zatwierdzone i wypchnięte do repozytorium. Jeśli chcesz utworzyć nowe przykładowe rozwiązanie do testowania tego artykułu, wykonaj kroki opisane w artykule Tworzenie modułów usługi Azure IoT Edge przy użyciu programu Visual Studio Code. W tym artykule utworzyliśmy rozwiązanie w naszym repozytorium o nazwie IoTEdgeSolution, które zawiera kod modułu o nazwie filtermodule.

    W tym artykule potrzebny jest folder rozwiązania utworzony przez szablony usługi IoT Edge w programie Visual Studio Code lub Visual Studio. Nie musisz kompilować, wypychać, wdrażać ani debugować tego kodu przed kontynuowaniem. Skonfigurujesz te procesy w usłudze Azure Pipelines.

    Poznaj ścieżkę do pliku deployment.template.json w rozwiązaniu, który jest używany w kilku krokach. Jeśli nie znasz roli szablonu wdrażania, zobacz Dowiedz się, jak wdrażać moduły i ustanawiać trasy.

    Napiwek

    Jeśli tworzysz nowe rozwiązanie, najpierw sklonuj repozytorium lokalnie. Następnie podczas tworzenia rozwiązania można go utworzyć bezpośrednio w folderze repozytorium. Możesz łatwo zatwierdzić i wypchnąć nowe pliki z tego miejsca.

  • Rejestr kontenerów, w którym można wypychać obrazy modułów. Możesz użyć usługi Azure Container Registry lub rejestru innej firmy.

  • Aktywna usługa Azure IoT Hub z co najmniej dwoma urządzeniami usługi IoT Edge na potrzeby testowania oddzielnych etapów wdrażania testowego i produkcyjnego. Możesz skorzystać z artykułów z przewodnika Szybki start, aby utworzyć urządzenie usługi IoT Edge w systemie Linux lub Windows

Tworzenie potoku kompilacji na potrzeby ciągłej integracji

W tej sekcji utworzysz nowy potok kompilacji. Potok jest konfigurowany do automatycznego uruchamiania i publikowania dzienników kompilacji za każdym razem, gdy zaewidencjonujesz zmiany w rozwiązaniu usługi IoT Edge.

  1. Zaloguj się do organizacji usługi Azure DevOps (https://dev.azure.com/{your organization}) i otwórz projekt zawierający repozytorium rozwiązania usługi IoT Edge.

    Zrzut ekranu przedstawiający sposób otwierania projektu DevOps.

  2. W menu okienka po lewej stronie w projekcie wybierz pozycję Potoki. Wybierz pozycję Utwórz potok w środku strony. Jeśli masz już potoki kompilacji, wybierz przycisk Nowy potok w prawym górnym rogu.

    Zrzut ekranu przedstawiający sposób tworzenia nowego potoku kompilacji.

  3. W dolnej części strony Gdzie znajduje się twój kod? wybierz pozycję Użyj edytora klasycznego. Jeśli chcesz użyć języka YAML do utworzenia potoków kompilacji projektu, zobacz przewodnik YAML.

    Zrzut ekranu przedstawiający sposób korzystania z edytora klasycznego.

  4. Postępuj zgodnie z monitami, aby utworzyć potok.

    1. Podaj informacje o źródle nowego potoku kompilacji. Wybierz pozycję Azure Repos Git jako źródło, a następnie wybierz projekt, repozytorium i gałąź, w której znajduje się kod rozwiązania usługi IoT Edge. Następnie wybierz pozycję Kontynuuj.

      Zrzut ekranu przedstawiający sposób wybierania źródła potoku.

    2. Wybierz pozycję Puste zadanie zamiast szablonu.

      Zrzut ekranu przedstawiający sposób rozpoczynania od pustego zadania dla potoku kompilacji.

  5. Po utworzeniu potoku zostanie on przeniesiony do edytora potoków. W tym miejscu można zmienić nazwę potoku, pulę agentów i specyfikację agenta.

    Możesz wybrać pulę hostowaną przez firmę Microsoft lub zarządzaną pulę self-hosted.

    W opisie potoku wybierz poprawną specyfikację agenta na podstawie platformy docelowej:

    • Jeśli chcesz skompilować moduły na platformie amd64 dla kontenerów systemu Linux, wybierz ubuntu-18.04

    • Jeśli chcesz utworzyć moduły na platformie amd64 dla kontenerów systemu Windows 1809, musisz skonfigurować własnego agenta w systemie Windows.

    • Jeśli chcesz utworzyć moduły na platformie arm32v7 lub arm64 dla kontenerów systemu Linux, musisz skonfigurować własnego agenta w systemie Linux.

    Konfigurowanie specyfikacji agenta kompilacji.

  6. Potok jest wstępnie skonfigurowany z zadaniem o nazwie Zadanie agenta 1. Wybierz znak plus (+), aby dodać cztery zadania do zadania: usługa Azure IoT Edge dwa razy, raz skopiuj pliki i opublikuj artefakty kompilacji raz. Wyszukaj każde zadanie i umieść kursor nad nazwą zadania, aby wyświetlić przycisk Dodaj .

    Dodaj zadanie usługi Azure IoT Edge.

    Po dodaniu wszystkich czterech zadań zadanie agenta wygląda następująco:

    Cztery zadania w potoku kompilacji.

  7. Wybierz pierwsze zadanie usługi Azure IoT Edge , aby je edytować. To zadanie kompiluje wszystkie moduły w rozwiązaniu przy użyciu określonej platformy docelowej. Edytuj zadanie przy użyciu następujących wartości:

    Parametr Opis
    Display name Nazwa wyświetlana jest automatycznie aktualizowana po zmianie pola Akcja.
    Akcja Wybierz pozycję Kompiluj obrazy modułów.
    plik .template.json Wybierz wielokropek (...) i przejdź do pliku deployment.template.json w repozytorium zawierającym rozwiązanie usługi IoT Edge.
    Domyślna platforma Wybierz odpowiedni system operacyjny dla modułów na podstawie docelowego urządzenia usługi IoT Edge.
    Zmienne wyjściowe Podaj nazwę odwołania do skojarzenia ze ścieżką pliku, w której jest generowany plik deployment.json, taki jak krawędź.

    Aby uzyskać więcej informacji na temat tego zadania i jego parametrów, zobacz Zadanie usługi Azure IoT Edge.

    Te konfiguracje używają repozytorium obrazów i tagów zdefiniowanych w module.json pliku w celu nadania nazwy i tagowania obrazu modułu. Obrazy modułów kompilacji pomagają również zastąpić zmienne dokładną wartością zdefiniowaną module.json w pliku. W programie Visual Studio lub Visual Studio Code należy określić rzeczywistą wartość w .env pliku. W usłudze Azure Pipelines należy ustawić wartość na karcie Zmienne potoku. Wybierz kartę Zmienne w menu edytora potoku i skonfiguruj nazwę i wartość w następujący sposób:

    • ACR_ADDRESS: Wartość serwera logowania usługi Azure Container Registry. Wartość serwera logowania można znaleźć na stronie przeglądu rejestru kontenerów w witrynie Azure Portal.

    Jeśli masz inne zmienne w projekcie, możesz określić nazwę i wartość na tej karcie. Obrazy modułów kompilacji rozpoznają tylko zmienne, ${VARIABLE} które mają format. Upewnij się, że używasz tego formatu w plikach **/module.json .

  8. Wybierz drugie zadanie usługi Azure IoT Edge , aby je edytować. To zadanie wypycha wszystkie obrazy modułów do wybranego rejestru kontenerów.

    Parametr Opis
    Display name Nazwa wyświetlana jest automatycznie aktualizowana po zmianie pola Akcja.
    Akcja Wybierz pozycję Wypychanie obrazów modułów.
    Typ rejestru kontenerów Użyj domyślnego typu: Azure Container Registry.
    Subskrypcja platformy Azure Wybierz subskrypcję.
    Azure Container Registry Wybierz typ rejestru kontenerów używany do przechowywania obrazów modułów. W zależności od wybranego typu rejestru zmienia się formularz. Jeśli wybierzesz usługę Azure Container Registry, użyj list rozwijanych, aby wybrać subskrypcję platformy Azure i nazwę rejestru kontenerów. Jeśli wybierzesz pozycję Ogólny rejestr kontenerów, wybierz pozycję Nowy , aby utworzyć połączenie usługi rejestru.
    plik .template.json Wybierz wielokropek (...) i przejdź do pliku deployment.template.json w repozytorium zawierającym rozwiązanie usługi IoT Edge.
    Domyślna platforma Wybierz odpowiedni system operacyjny dla modułów na podstawie docelowego urządzenia usługi IoT Edge.
    Dodawanie poświadczeń rejestru do manifestu wdrożenia Określ wartość true, aby dodać poświadczenia rejestru do wypychania obrazów platformy Docker do manifestu wdrożenia.

    Aby uzyskać więcej informacji na temat tego zadania i jego parametrów, zobacz Zadanie usługi Azure IoT Edge.

    Jeśli masz wiele rejestrów kontenerów do hostowania obrazów modułów, musisz zduplikować to zadanie, wybrać inny rejestr kontenerów i użyć modułów Obejścia w ustawieniach zaawansowanych , aby pominąć obrazy, które nie są przeznaczone dla tego konkretnego rejestru.

  9. Wybierz zadanie Kopiuj pliki, aby je edytować. To zadanie służy do kopiowania plików do katalogu przejściowego artefaktu.

    Parametr Opis
    Display name Użyj nazwy domyślnej lub dostosuj
    Folder źródłowy Folder z plikami do skopiowania.
    Zawartość Dodaj dwa wiersze: deployment.template.json i **/module.json. Te dwa pliki służą jako dane wejściowe w celu wygenerowania manifestu wdrożenia usługi IoT Edge.
    Folder docelowy Określ zmienną $(Build.ArtifactStagingDirectory). Zobacz Build variables (Zmienne kompilacji), aby dowiedzieć się więcej o opisie.

    Aby uzyskać więcej informacji o tym zadaniu i jego parametrach, zobacz Kopiowanie plików.

  10. Wybierz zadanie Publikuj artefakty kompilacji, aby je edytować. Podaj ścieżkę katalogu przejściowego artefaktu do zadania, aby można było opublikować ścieżkę do potoku wydania.

    Parametr Opis
    Display name Użyj nazwy domyślnej lub dostosuj.
    Ścieżka do publikowania Określ zmienną $(Build.ArtifactStagingDirectory). Aby dowiedzieć się więcej, zobacz Kompilowanie zmiennych .
    Nazwa artefaktu Użyj nazwy domyślnej: drop
    Lokalizacja publikowania artefaktu Użyj lokalizacji domyślnej: Azure Pipelines

    Aby uzyskać więcej informacji o tym zadaniu i jego parametrach, zobacz Publikowanie artefaktów kompilacji.

  11. Otwórz kartę Wyzwalacze i zaznacz pole wyboru Włącz ciągłą integrację. Upewnij się, że uwzględniono gałąź zawierającą kod.

Zrzut ekranu przedstawiający sposób włączania wyzwalacza ciągłej integracji.

  1. Wybierz pozycję Zapisz z listy rozwijanej Zapisz i kolejkę .

Ten potok jest teraz skonfigurowany do automatycznego uruchamiania po wypchnięciu nowego kodu do repozytorium. Ostatnie zadanie, publikowanie artefaktów potoku, wyzwala potok wydania. Przejdź do następnej sekcji, aby skompilować potok wydania.

Tworzenie potoku wydania na potrzeby ciągłego wdrażania

W tej sekcji utworzysz potok wydania, który jest skonfigurowany do automatycznego uruchamiania po porzuceniu artefaktów potoku kompilacji i wyświetli dzienniki wdrażania w usłudze Azure Pipelines.

Utwórz nowy potok i dodaj nowy etap:

  1. Na karcie Wydania w obszarze Potoki wybierz pozycję + Nowy potok. Jeśli masz już potoki wydania, wybierz przycisk + Nowy i wybierz pozycję + Nowy potok wydania.

    Dodawanie potoku wydania przy użyciu przycisku + Nowy potok

  2. Po wyświetleniu monitu o wybranie szablonu wybierz opcję rozpoczęcia od pustego zadania.

    Rozpocznij od pustego zadania dla potoku wydania

  3. Nowy potok wydania inicjuje się przy użyciu jednego etapu o nazwie Etap 1. Zmień nazwę etapu 1 na dewelopera i traktuj go jako potok ciągłego wdrażania dla środowiska deweloperskiego. Zazwyczaj potoki ciągłego wdrażania mają wiele etapów, w tym deweloperów, przejściowych i prod. Możesz użyć różnych nazw i utworzyć więcej na podstawie praktyki DevOps. Zamknij okno szczegółów etapu po zmianie nazwy.

    Możesz również zmienić nazwę potoku wydania, wybierając tekst "Nowy potok wydania" u góry.

  4. Połącz wydanie z artefaktami kompilacji opublikowanymi przez potok kompilacji. Kliknij pozycję Dodaj w obszarze artefaktów.

    Kliknij pozycję Dodaj w obszarze artefaktów interfejsu

  5. Na stronie Dodawanie artefaktu wybierz pozycję Kompiluj jako typ źródła. Wybierz projekt i utworzony potok kompilacji. Jeśli chcesz, możesz zmienić alias źródła na bardziej opisowy. Następnie wybierz pozycję Dodaj.

    Na stronie dodawania artefaktu wybierz pozycję Dodaj, aby utworzyć artefakt

  6. Otwórz wyzwalacze artefaktu i wybierz przełącznik, aby włączyć wyzwalacz ciągłego wdrażania. Teraz zostanie utworzona nowa wersja za każdym razem, gdy będzie dostępna nowa kompilacja.

    Otwórz wyzwalacze artefaktu i przełącz, aby włączyć wyzwalacz ciągłego wdrażania

  7. Etap deweloperski jest wstępnie skonfigurowany z jednym zadaniem i zerowymi zadaniami. Z menu potoku wybierz pozycję Zadania, a następnie wybierz etap deweloperski. Wybierz zadanie agenta i zmień jego nazwę wyświetlaną na QA. Możesz skonfigurować szczegółowe informacje o zadaniu agenta, ale zadanie wdrażania jest niewrażliwe na platformę, dzięki czemu można użyć dowolnej specyfikacji agenta w wybranej puli agentów.

    Wyświetlanie zadań dla etapu deweloperskiego na karcie Zadania

  8. W zadaniu kontroli jakości wybierz znak plus (+), aby dodać dwa zadania. Wyszukaj i dodaj usługę Azure IoT Edge dwa razy.

  9. Wybierz pierwsze zadanie usługi Azure IoT Edge i skonfiguruj je przy użyciu następujących wartości:

    Parametr Opis
    Display name Nazwa wyświetlana jest automatycznie aktualizowana po zmianie pola Akcja.
    Akcja Wybierz opcję Generate deployment manifest.
    plik .template.json Określ ścieżkę: $(System.DefaultWorkingDirectory)/Drop/drop/deployment.template.json. Ścieżka jest publikowana z potoku kompilacji.
    Domyślna platforma Wybierz odpowiedni system operacyjny dla modułów na podstawie docelowego urządzenia usługi IoT Edge.
    Ścieżka wyjściowa Umieść ścieżkę $(System.DefaultWorkingDirectory)/Drop/drop/configs/deployment.json. Ta ścieżka jest ostatnim plikiem manifestu wdrożenia usługi IoT Edge.

    Te konfiguracje pomagają zastąpić adresy URL obrazów modułu deployment.template.json w pliku. Manifest Generowanie wdrożenia pomaga również zastąpić zmienne dokładną wartością zdefiniowaną deployment.template.json w pliku. W programie Visual Studio/Visual Studio Code określasz rzeczywistą wartość w .env pliku. W usłudze Azure Pipelines należy ustawić wartość na karcie Zmienne potoku wydania. Przejdź do karty Zmienne i skonfiguruj nazwę i wartość w następujący sposób:

    • ACR_ADDRESS: Wartość serwera logowania usługi Azure Container Registry. Serwer logowania można pobrać ze strony Przegląd rejestru kontenerów w witrynie Azure Portal.
    • ACR_PASSWORD: Hasło usługi Azure Container Registry.
    • ACR_USER: Nazwa użytkownika usługi Azure Container Registry.

    Jeśli masz inne zmienne w projekcie, możesz określić nazwę i wartość na tej karcie. Manifest generowania wdrożenia może rozpoznawać tylko zmienne, które są w ${VARIABLE} smaku. Upewnij się, że używasz tego smaku w plikach *.template.json .

    "registryCredentials": {
      "<ACR name>": { // Your Azure Container Registry **Registry name** value
        "username": "${ACR_USER}",
        "password": "${ACR_PASSWORD}",
        "address": "${ACR_ADDRESS}"
      }
    }
    

    Konfigurowanie zmiennych dla potoku wydania na karcie Zmienne

  10. Wybierz drugie zadanie usługi Azure IoT Edge i skonfiguruj je przy użyciu następujących wartości:

    Parametr Opis
    Display name Nazwa wyświetlana jest automatycznie aktualizowana po zmianie pola Akcja.
    Akcja Wybierz opcję Deploy to IoT Edge devices.
    Plik wdrożenia Umieść ścieżkę $(System.DefaultWorkingDirectory)/Drop/drop/configs/deployment.json. Ta ścieżka to plik manifestu wdrożenia usługi IoT Edge.
    Subskrypcja platformy Azure Wybierz subskrypcję zawierającą usługę IoT Hub.
    Nazwa centrum IoT Wybierz centrum IoT Hub.
    Wybieranie pojedynczego/wielokrotnego urządzenia Określ, czy potok wydania ma zostać wdrożony na jednym lub wielu urządzeniach. W przypadku wdrożenia na jednym urządzeniu wprowadź identyfikator urządzenia usługi IoT Edge. Jeśli wdrażasz na wielu urządzeniach, określ warunek docelowy urządzenia. Warunek docelowy jest filtrem zgodnym z zestawem urządzeń usługi IoT Edge w usłudze IoT Hub. Jeśli chcesz użyć tagów urządzeń jako warunku, musisz zaktualizować odpowiednie tagi urządzeń za pomocą bliźniaczej reprezentacji urządzenia usługi IoT Hub. Zaktualizuj identyfikator wdrożenia usługi IoT Edge i priorytet wdrożenia usługi IoT Edge w ustawieniach zaawansowanych. Aby uzyskać więcej informacji na temat tworzenia wdrożenia dla wielu urządzeń, zobacz Omówienie wdrożeń automatycznych usługi IoT Edge.
    Identyfikator urządzenia lub warunek docelowy W zależności od wcześniejszego wyboru określ identyfikator urządzenia lub warunek docelowy do wdrożenia na wielu urządzeniach.
    Zaawansowani W polu Identyfikator wdrożenia usługi IoT Edge określ wartość $(System.TeamProject)-$(Release.EnvironmentName). Ta zmienna mapuje nazwę projektu i wydania na identyfikator wdrożenia usługi IoT Edge.

    Jeśli zadanie obejmuje użycie obrazu znajdującego się w prywatnym rejestrze zaufanym platformy Docker, który nie jest widoczny dla chmury publicznej, możesz ustawić zmienną środowiskową SKIP_MODULE_IMAGE_VALIDATION , aby true pominąć walidację obrazu.

    Dodawanie zadań usługi Azure IoT Edge dla etapu deweloperskiego

  11. Wybierz pozycję Zapisz , aby zapisać zmiany w nowym potoku wydania. Wróć do widoku potoku, wybierając kartę Potok z menu.

Uwaga

Wdrożenia warstwowe nie są jeszcze obsługiwane w zadaniach usługi Azure IoT Edge w usłudze Azure DevOps.

Jednak możesz użyć zadania interfejsu wiersza polecenia platformy Azure w usłudze Azure DevOps , aby utworzyć wdrożenie jako wdrożenie warstwowe. Dla wartości Skrypt wbudowany można użyć polecenia az iot edge deployment create:

az iot edge deployment create -d {deployment_name} -n {hub_name} --content modules_content.json --layered true

Weryfikowanie ciągłej integracji/ciągłego wdrażania usługi IoT Edge przy użyciu potoków kompilacji i wydania

Aby wyzwolić zadanie kompilacji, możesz wypchnąć zatwierdzenie do repozytorium kodu źródłowego lub ręcznie go wyzwolić. W tej sekcji ręcznie wyzwolisz potok ciągłej integracji/ciągłego wdrażania, aby sprawdzić, czy działa. Następnie sprawdź, czy wdrożenie zakończy się pomyślnie.

  1. W menu okienka po lewej stronie wybierz pozycję Potoki i otwórz potok kompilacji utworzony na początku tego artykułu.

  2. Zadanie kompilacji w potoku kompilacji można wyzwolić, wybierając przycisk Uruchom potok w prawym górnym rogu.

    Ręczne wyzwalanie potoku kompilacji przy użyciu przycisku Uruchom potok

  3. Przejrzyj ustawienia Uruchom potok. Następnie wybierz pozycję Uruchom.

    Określ opcje potoku uruchamiania i wybierz pozycję Uruchom

  4. Wybierz pozycję Zadanie agenta 1 , aby obejrzeć postęp przebiegu. Możesz przejrzeć dzienniki danych wyjściowych zadania, wybierając zadanie.

    Przeglądanie danych wyjściowych dziennika zadania

  5. Jeśli potok kompilacji został ukończony pomyślnie, wyzwala wydanie do etapu deweloperskiego . Pomyślne wydanie deweloperskie tworzy wdrożenie usługi IoT Edge na docelowych urządzeniach usługi IoT Edge.

    Wydanie do dewelopera

  6. Kliknij pozycję Dev Stage, aby wyświetlić dzienniki wydania.

    Dzienniki wydań

  7. Jeśli potok kończy się niepowodzeniem, zacznij od przejrzenia dzienników. Dzienniki można wyświetlić, przechodząc do podsumowania przebiegu potoku i wybierając zadanie i zadanie. Jeśli określone zadanie kończy się niepowodzeniem, sprawdź dzienniki dla tego zadania. Aby uzyskać szczegółowe instrukcje dotyczące konfigurowania i używania dzienników, zobacz Przeglądanie dzienników w celu diagnozowania problemów z potokiem.

Następne kroki