Непрерывная интеграция и непрерывное развертывание на устройствах Azure IoT Edge (классический редактор)

Применимо к:IoT Edge 1.4 галочка IoT Edge 1.4

Важно!

IoT Edge 1.4 является поддерживаемым выпуском. Если вы используете более ранний выпуск, см. статью Обновление IoT Edge.

Azure Pipelines включает встроенную задачу Azure IoT Edge, которая позволяет внедрять DevOps с приложениями Azure IoT Edge. В этой статье показано, как с помощью функций непрерывной интеграции и непрерывного развертывания, предоставляемых 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, зафиксированное и отправленное в репозиторий. Если вы хотите создать новый пример решения для тестирования этой статьи, выполните действия, описанные в статье Разработка модулей 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.

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

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

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

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

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

    Снимок экрана: создание конвейера сборки.

  3. В нижней части страницы Где ваш код? выберите Использовать классический редактор. Если нужно использовать YAML для создания конвейеров сборки проекта, см. Руководство по YAML.

    Снимок экрана: использование классического редактора.

  4. Следуйте инструкциям на экране для создания конвейера.

    1. Укажите сведения об источнике для нового конвейера сборки. Выберите Azure Repos Git в качестве источника, а затем выберите проект, репозиторий и ветвь, в которой расположен код решения IoT Edge. Затем выберите Продолжить.

      Снимок экрана: выбор источника конвейера.

    2. Выберите Пустое задание вместо шаблона.

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

  5. После создания конвейера вы перейдете в редактор конвейера. Здесь можно изменить имя конвейера, пул агентов и спецификацию агента.

    Можно выбрать пул, размещенный на сервере Майкрософт, или собственный пул, управляемый вами.

    В описании конвейера выберите для своей целевой платформы правильную спецификацию агента.

    Настройка спецификации агента сборки.

  6. Конвейер предварительно настроен с заданием Agent job 1 (Задание агента 1). Щелкните знак "плюс" ( + ), чтобы добавить в задание четыре задачи: Azure IoT Edge дважды, Копирование файлов один раз и Публикация артефактов сборки один раз. Выполните поиск для каждой задачи и наведите указатель мыши на имя задачи, чтобы появилась кнопка Добавить.

    Добавление задачи Azure IoT Edge.

    После добавления всех четырех задач задание агента будет выглядеть следующим образом.

    Четыре задачи в конвейере сборки.

  7. Выберите первую задачу Azure IoT Edge, чтобы изменить ее. Эта задача соберет все включенные в решение модули для выбранной целевой платформы. Измените задачу, используя следующие значения.

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

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

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

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

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

  8. Выберите вторую задачу Azure IoT Edge, чтобы изменить ее. Эта задача передает все образы модулей в выбранный реестр контейнеров.

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

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

    Если для размещения образов модулей используется несколько реестров контейнеров, создайте дубликат этой задачи, выберите в нем другой реестр контейнеров и используйте Обойти модулив разделе настроек Дополнительно, чтобы обойти образы, не имеющие отношение к конкретному реестру.

  9. Выберите задачу Копирование файлов, чтобы изменить ее. Эта задача предназначена для копирования файлов в каталог временного размещения артефактов.

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

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

  10. Выберите задачу Publish Build Artifacts (Публикация артефактов сборки), чтобы изменить его. Укажите путь к каталогу временного размещения артефактов для задачи, чтобы этот путь можно было опубликовать в конвейере выпуска.

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

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

  11. Откройте вкладку Триггеры и установите флажок Enable continuous integration (Включить непрерывную интеграцию). Убедитесь, что включена ветвь, содержащая ваш код.

Снимок экрана: включение триггера непрерывной интеграции.

  1. Выберите Сохранить в раскрывающемся списке Сохранить и поместить в очередь.

Этот конвейер настроен на автоматический запуск при отправке нового кода в репозиторий. Последняя задача, публикация артефактов конвейера, активирует конвейер выпуска. Перейдите к следующему разделу для создания конвейера выпуска.

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

В этом разделе описано, как создать конвейер выпуска, настроенный для автоматического запуска при получении артефакта от конвейера сборки и отображения журналов сборки в 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. Выберите Сохранить, чтобы сохранить изменения в новом конвейере выпуска. Вернитесь в представление конвейера, выбрав в меню вкладку Конвейер.

Примечание

Многоуровневые развертывания еще не поддерживаются в задачах Azure IoT Edge в Azure DevOps.

Но можно использовать задачу Azure CLI в Azure DevOps, чтобы создать развертывание как многоуровневое. Для значения Встроенный скрипт можно использовать команду az IoT Edge deployment create command.

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

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

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

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

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

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

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

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

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

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

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

    Выпуск для dev

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

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

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

Дальнейшие действия