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

Область применения:IoT Edge 1.4 проверка mark IoT Edge 1.4

Внимание

IoT Edge 1.4 является поддерживаемым выпуском. Если вы используете более ранний выпуск, см. статью Обновление 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, добавленная в конвейер, реализует одно из следующих четырех действий.

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

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

Необходимые компоненты

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

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

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

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

    Совет

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

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

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

Дополнительные сведения об использовании Azure Repos см. в статье Share your code with Visual Studio 2015 and 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. На экране Настройка конвейера выберите Начальный конвейер. Если у вас есть существующий файл YAML Azure Pipelines, который вы хотите использовать для создания этого конвейера, можно выбрать существующий файл YAML Azure Pipelines и указать ветвь и путь в репозитории к файлу.

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

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

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

    Снимок экрана, на котором показано, как выбрать

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

    Параметр Описание
    Действие Выберите Сборка образов модулей.
    Файл 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 и **/module.json.
      Целевая папка Задайте переменную $(Build.ArtifactStagingDirectory). Дополнительные сведения об описании см. в статье Переменные сборки.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Нажатие кнопки

  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 Edge. При развертывании на нескольких устройствах следует указать целевое условие устройства. Целевое условие используется как фильтр для сопоставления с набором устройств Edge в Центре Интернета вещей. Если в качестве условия решено использовать теги устройств, не забудьте обновить соответствующие теги устройств в двойниках устройств Центра Интернета вещей. Обновите идентификатор развертывания и приоритет развертывания IoT Edge в разделе дополнительных параметров. Дополнительные сведения о создании развертывания для нескольких устройств см. в статье Общие сведения об автоматических развертываниях IoT Edge для отдельных устройств или в требуемом масштабе.
    Идентификатор или целевое условие устройства В зависимости от предыдущего выбора укажите идентификатор устройства или целевое условие для развертывания на нескольких устройствах.
    Расширенные Для идентификатора развертывания IoT Edge укажите $(System.TeamProject)-$(Release.EnvironmentName). Эта переменная сопоставляет проект и имя выпуска с идентификатором развертывания IoT Edge.

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

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

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

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

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

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

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

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

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

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

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

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

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

    Выпуск для dev

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

    Журналы выпуска

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

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