Непрерывная интеграция и непрерывное развертывание на устройствах Azure IoT Edge

Применяется к:IoT Edge 1.6 с галочкой IoT Edge 1.6

Внимание

IoT Edge 1.6 LTS — поддерживаемый релиз. Поддержка IoT Edge 1.5 LTS заканчивается 10 ноября 2026 года; IoT Edge 1.4 LTS завершил срок службы 12 ноября 2024 года. Если вы используете более ранний выпуск, ознакомьтесь с Update IoT Edge.

Внедрите DevOps с помощью приложений Azure IoT Edge, используя встроенные задачи Azure IoT Edge в Azure Pipelines. В этой статье показано, как использовать Azure Pipelines для создания, тестирования и развертывания модулей Azure IoT Edge с помощью YAML.

Схема непрерывной интеграции и непрерывной разработки для разработки и производства.

В этой статье вы научитесь использовать встроенные задачи Azure IoT Edge в Azure Pipelines для создания конвейеров сборки и выпуска для решения на основе IoT Edge. Каждая Azure IoT Edge задача в конвейере выполняет одно из следующих действий:

Действие Описание
Сборка образов модулей Принимает код решения IoT Edge и создает образы контейнеров.
Отправка образов модулей Отправляет образы модулей в указанный реестр контейнеров.
Создание манифеста развертывания Принимает файл deployment.template.json и переменные, а затем создает окончательный файл манифеста развертывания IoT Edge.
Развертывание на IoT Edge устройствах Создает развертывания IoT Edge на одном или более устройствах IoT Edge.

Если это не указано, эта статья не охватывает все функциональные возможности, доступные с помощью параметров задачи. Дополнительные сведения см. на следующих ресурсах:

Предварительные условия

  • Репозиторий Azure Repos. Если у вас нет его, создайте в проекте репозиторий Git. В этой статье репозиторий называется IoTEdgeRepo.

  • Решение IoT Edge коммитировано и отправлено в репозиторий. Чтобы создать пример решения для тестирования этой статьи, выполните действия, описанные в Develop Azure IoT Edge модулях с помощью Visual Studio Code. Для этой статьи в нашем репозитории было создано решение с именем IoTEdgeSolution, содержащее код для модуля с именем filtermodule.

    Для этой статьи вам потребуется папка решения, созданная шаблонами IoT Edge в Visual Studio Code или Visual Studio. Вам не требуется создавать, отправлять, развертывать или отлаживать этот код, чтобы продолжить. Эти процессы настраиваются в Azure Pipelines.

    Убедитесь, что вы знаете путь к файлу deployment.template.json в решении, который используется в нескольких шагах. Если вы не знакомы с ролью шаблона развертывания, см. статью о развертывании модулей и настройке маршрутов.

    Совет

    Если вы создаете решение, сначала клонируйте репозиторий локально. Затем вы сможете создать решение непосредственно в папке репозитория. Вы можете легко фиксировать и отправлять новые файлы оттуда.

  • Реестр контейнеров, в который можно отправлять образы модулей. Вы можете использовать Реестр контейнеров Azure или сторонний реестр.

  • Активный концентратор Azure IoT с по крайней мере двумя IoT Edge устройствами для тестирования отдельных этапов тестирования и рабочего развертывания. Пройдите статьи быстрого начала, чтобы создать устройство IoT Edge на Linux или Windows.

Дополнительные сведения об использовании Azure Repos в Совместное использование кода с Visual Studio и Azure Repos.

Создание конвейера сборки для непрерывной интеграции

В этом разделе показано, как создать конвейер сборки. Вы настраиваете конвейер для автоматического запуска при проверке любых изменений в примере решения IoT Edge и публикации журналов сборки.

  1. Войдите в организацию Azure DevOps (https://dev.azure.com/{your organization}) и откройте проект, содержащий репозиторий решений IoT Edge.

    Снимок экрана: открытие проекта DevOps.

  2. В меню левой панели вашего проекта выберите Пайплайны. В центре страницы выберите Создать конвейер. Если же конвейеры сборки уже есть, нажмите кнопку Создать конвейер справа вверху.

    Снимок экрана: создание конвейера сборки с помощью кнопки

  3. На странице Где ваш код? выберите Azure Repos Git YAML.

  4. Выберите репозиторий, для которого создается конвейер.

    Снимок экрана: выбор репозитория для конвейера сборки.

  5. На экране Настройка конвейера выберите Начальный конвейер. Если у вас есть предварительно существующий Azure Pipelines YAML-файл, который вы хотите использовать для создания этого конвейера, можно выбрать Existing Azure Pipelines YAML-файл и указать ветвь и путь в репозитории в файл.

    Выберите Starter pipeline или существующий YAML-файл для Azure Pipelines, чтобы начать сборку конвейера

  6. На странице Обзор YAML конвейера можно изменить имя по умолчанию azure-pipelines.yml, чтобы переименовать файл конфигурации конвейера.

    Выберите параметр Показывать помощник, чтобы открыть палитру задач.

    Снимок экрана, на котором показано, как выбрать помощника для открытия палитры задач.

  7. Чтобы добавить задачу, поместите курсор в конец YAML или в любое место, где нужно добавить инструкции для задачи. Найдите и выберите Azure IoT Edge, заполните параметры задачи следующим образом, а затем выберите Add.

    Параметр Описание
    Действие Выберите Создать образы модулей.
    Файл template.json. Укажите путь к файлу deployment.template.json в репозитории, содержащем решение IoT Edge.
    Платформа по умолчанию Выберите соответствующую операционную систему для модулей на основе целевого устройства IoT Edge.

    Дополнительные сведения об этой задаче и ее параметрах см. в разделе Azure IoT Edge задача.

    Снимок экрана: палитра

    Совет

    После добавления каждой задачи редактор автоматически выделяет добавленные строки. Чтобы предотвратить случайную перезапись, отмените выбор строк и выделите новое место для следующей задачи, прежде чем добавлять дополнительные задачи.

  8. Повторите эту процедуру, чтобы добавить еще три задачи со следующими параметрами:

    • Задача: Azure IoT Edge

      Параметр Описание
      Действие Выберите Загрузить образы модулей.
      Тип реестра контейнеров Используйте тип по умолчанию: Реестр контейнеров Azure.
      подписка Azure Выберите свою подписку.
      Реестр контейнеров Azure Выберите реестр, который вы хотите использовать для конвейера.
      Файл template.json. Укажите путь к файлу deployment.template.json в репозитории, содержащем решение IoT Edge.
      Платформа по умолчанию Выберите соответствующую операционную систему для модулей на основе целевого устройства IoT Edge.

      Дополнительные сведения об этой задаче и ее параметрах см. в разделе Azure IoT Edge задача.

    • Задача: Копирование файлов

      Параметр Описание
      Исходная папка Исходная папка, из которой производится копирование. Пусто — это корень репозитория. Используйте переменные, если файлы отсутствуют в репозитории. Пример: $(agent.builddirectory).
      Содержимое Добавьте две строки: deployment.template.json и modules/**/module.json.
      Целевая папка Задайте переменную $(Build.ArtifactStagingDirectory). См. статью Переменные сборки, чтобы узнать об описании.

      Дополнительные сведения об этой задаче и ее параметрах см. в статье Задача копирования файлов.

    • Задача: Публикация артефактов сборки

      Параметр Описание
      Путь для публикации Задайте переменную $(Build.ArtifactStagingDirectory). См. статью Переменные сборки, чтобы узнать об описании.
      Имя артефакта Укажите имя по умолчанию: drop
      Расположение публикации артефакта Используйте расположение по умолчанию: Azure Pipelines

      Дополнительные сведения об этой задаче и параметрах см. в статье Задача публикации артефактов сборки.

  9. Выберите Сохранить в раскрывающемся списке Сохранить и запустить в правом верхнем углу.

  10. Триггер для непрерывной интеграции для конвейера YAML включен по умолчанию. Если вы хотите изменить эти параметры, выберите конвейер и нажмите кнопку "Изменить " в правом верхнем углу. Выберите Дополнительные действия рядом с кнопкой Выполнить в правом верхнем углу и перейдите к Триггеры. Непрерывная интеграция отображается как включенная под именем вашего конвейера. Если вы хотите просмотреть сведения о триггере, установите флажок Переопределить триггер непрерывной интеграции YAML.

Снимок экрана: просмотр параметров триггера конвейера в меню

Перейдите к следующему разделу для создания конвейера выпуска.

Создание конвейера выпуска для непрерывного развертывания

В этом разделе описано, как создать конвейер выпуска, настроенный для автоматического запуска при удалении артефактов конвейера сборки, и в нем отображаются журналы развертывания в Azure Pipelines.

Создайте новый конвейер и добавьте новый этап:

  1. На вкладке Выпуски в разделе Конвейеры выберите + Новый конвейер. Если у вас уже есть конвейеры выпуска, нажмите кнопку + Создать и щелкните + Создать конвейер выпуска.

    Добавление конвейера выпуска с помощью кнопки

  2. Когда будет предложено выбрать шаблон, выберите пустое задание.

    Начните с пустой задачи для конвейера релиза

  3. Ваш новый конвейер выпуска инициализируется с одним этапом, который называется Этап 1. Переименуйте этап 1 в dev и рассматривайте его как конвейер для непрерывного развертывания в вашей среде разработки. Обычно конвейеры непрерывного развертывания состоят из нескольких этапов, в числе которых разработка, промежуточный процесс и производственная среда. Можно использовать другие имена и создать больше этапов, основываясь на своей практике разработки и выполнения операций. Закройте окно сведений об этапе после его переименования.

    Также можно переименовать конвейер выпуска, выбрав вверху текст "Новый конвейер выпуска".

  4. Свяжите выпуск с артефактами сборки, опубликованными конвейером сборки. Выберите Добавить в области артефактов.

    Щелкните

  5. На странице Добавление артефакта выберите Сборка как Тип источника. Затем выберите созданный проект и конвейер сборки. При желании Псевдоним источника можно изменить на более описательный. Затем нажмите кнопку "Добавить".

    Выбор

  6. Откройте триггеры артефакта и выберите переключатель для включения триггера непрерывного развертывания. Теперь новый выпуск создается каждый раз, когда доступна новая сборка.

    Откройте триггеры артефакта и переключите, чтобы включить триггер непрерывного развертывания

  7. Для этапа разработки заранее настроено одно задание и отсутствие задач. В меню конвейера выберите Задачи, а затем — этап разработка. Выберите Задание агента и измените его Отображаемое имя на Контроль качества. Можно настроить сведения о задании агента, но задача развертывания не зависит от платформы, поэтому можно использовать любую Спецификацию агента в выбранном Пуле агентов.

    Просмотр задач для этапа разработки на вкладке

  8. В задании контроля качества выберите знак "плюс" (+), чтобы добавить две задачи. Выполните поиск и добавьте Azure IoT Edge дважды.

  9. Выберите первую задачу Azure IoT Edge и настройте ее следующими значениями:

    Параметр Описание
    Показать имя Отображаемое имя автоматически изменяется при изменении поля "Действие".
    Действие Выберите Generate deployment manifest.
    Файл template.json. Укажите путь: $(System.DefaultWorkingDirectory)/Drop/drop/deployment.template.json. Путь публикуется из конвейера сборки.
    Платформа по умолчанию Выберите соответствующую операционную систему для модулей на основе целевого устройства IoT Edge.
    Путь вывода Вставьте путь $(System.DefaultWorkingDirectory)/Drop/drop/configs/deployment.json. Этот путь является последним файлом манифеста развертывания IoT Edge.

    Эти конфигурации помогают заменить URL-адреса образа модуля в deployment.template.json файле. Создание манифеста развертывания также помогает заменить переменные точными значениями, определенными в файле deployment.template.json. В Visual Studio/Visual Studio Code вы указываете фактическое значение в файле .env. В Azure Pipelines задайте значение на вкладке Переменные конвейера выпуска. Перейдите на вкладку Переменные и настройте имя и значение следующим образом:

    • ACR_ADDRESS: адрес сервера входа в Реестр контейнеров Azure. Сервер входа можно получить на странице обзора реестра контейнеров на портале Azure.
    • ACR_PASSWORD: пароль Реестр контейнеров Azure.
    • ACR_USER: имя пользователя Реестр контейнеров Azure.

    Если в проекте есть другие переменные, можно указать их имена и значения на этой вкладке. Создание манифеста развертывания может распознать только переменные в версии ${VARIABLE}. Убедитесь, что вы используете эту версию в файлах *.template.json.

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

    Настройка переменных для конвейера выпуска на вкладке

  10. Выберите вторую задачу Azure IoT Edge и настройте ее со следующими значениями:

    Параметр Описание
    Показать имя Отображаемое имя автоматически изменяется при изменении поля "Действие".
    Действие Выберите Deploy to IoT Edge devices.
    Файл развертывания Вставьте путь $(System.DefaultWorkingDirectory)/Drop/drop/configs/deployment.json. Этот путь — это файл манифеста развертывания для IoT Edge.
    подписка Azure Выберите подписку, содержащую Центр Интернета вещей.
    имя IoT Хаб Выберите нужный Центр Интернета вещей.
    Выбор одного или нескольких устройств Выберите, нужно ли развернуть конвейер выпуска на одно или несколько устройств. При развертывании на одном устройстве введите идентификатор устройства IoT Edge. При развертывании на нескольких устройствах следует указать целевое условие устройства. Целевое условие — это фильтр, соответствующий набору устройств IoT Edge в Центр Интернета вещей. Если вы хотите использовать теги устройств в качестве условия, необходимо обновить соответствующие теги устройств с помощью двойника устройства Центр Интернета вещей. Обновите идентификатор развертывания IoT Edge и приоритет развертывания IoT Edge в расширенных параметрах. Дополнительные сведения о создании развертывания для нескольких устройств см. в статье Понимание автоматических развертываний IoT Edge.
    Идентификатор устройства или условие целевого состояния В зависимости от предыдущего выбора укажите идентификатор устройства или целевое условие для развертывания на нескольких устройствах.
    Продвинутые Для идентификатора развертывания IoT Edge укажите $(System.TeamProject)-$(Release.EnvironmentName). Эта переменная связывает проект и имя выпуска с идентификатором развертывания IoT Edge.

    Если в задаче используется образ, который находится в частном доверенном реестре Docker, не видимом в общедоступном облаке, можно задать для переменной среды SKIP_MODULE_IMAGE_VALIDATION значение true, чтобы пропустить проверку образа.

    Добавьте задачи Azure IoT Edge для этапа разработки

  11. Выберите Сохранить, чтобы сохранить изменения в новом конвейере выпуска. Вернитесь в представление конвейера, выбрав в меню вкладку Конвейер.

Убедитесь в правильности работы IoT Edge CI/CD, используя конвейеры сборки и релиза.

Чтобы запустить задание сборки, можно запушить коммит в репозиторий исходного кода или запустить его вручную. В этом разделе вы вручную запускаете конвейер CI/CD для проверки правильности его работы. Затем вы проверите успешность развертывания.

  1. В левой части меню выберите Конвейеры и откройте конвейер сборки, созданный в начале этой статьи.

  2. Чтобы запустить задание сборки в конвейере сборки, нажмите справа вверху кнопку Запустить конвейер.

    Запуск конвейера сборки вручную с помощью кнопки

  3. Проверьте параметры функции Запустить конвейер. Затем нажмите кнопку Запустить.

    Задание параметров запуска конвейера и выбор кнопки

  4. Выберите Задание агента 1, чтобы просмотреть ход выполнения. Чтобы просмотреть журналы выходных данных задания, выберите задание.

    Просмотр выходных данных журнала задания

  5. Если выполнение конвейера сборки завершится успешно, активируется переход на этап dev. Успешный выпуск dev создает развертывание IoT Edge для устройств, на которые нацелено IoT Edge.

    Релиз для разработчиков

  6. Выберите dev этап, чтобы просмотреть журналы релизов.

    Журналы релизов

  7. В случае сбоя конвейера начните с просмотра журналов. Чтобы просмотреть журналы, перейдите к сводке выполнения конвейера и выберите задание и задачу. В случае сбоя конкретной задачи проверьте журналы этой задачи. Подробные инструкции по настройке и использованию журналов см. в статье Анализ журналов для диагностики проблем конвейера.

Следующие шаги