Поделиться через


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

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

Это важно

Поддерживаются выпуски IoT Edge 1.5 LTS и 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. Ваш трубопровод предварительно настроен с заданием под названием Агентское задание 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. Выберите задачу "Опубликовать артефакты сборки", чтобы ее изменить. Укажите путь каталога промежуточного хранения артефакта для задачи, чтобы его можно было опубликовать в конвейере выпуска.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  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 Edge. При развертывании на нескольких устройствах следует указать целевое условие устройства. Целевое условие используется как фильтр для сопоставления с набором устройств IoT Edge в IoT Hub. Если в качестве условия решено использовать теги устройств, не забудьте обновить соответствующие теги устройств в двойниках устройств Центра Интернета вещей. Обновите идентификатор развертывания и приоритет развертывания 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 для создания развертывания в качестве многоуровневого развертывания. Для значения Inline Script можно использовать команду az iot edge deployment create:

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 устройства.

    Выпуск для разработки

  6. Щелкните стадию разработки, чтобы просмотреть журналы изменений.

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

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

Дальнейшие шаги