Непрерывная интеграция и непрерывное развертывание на устройствах Azure IoT Edge (классический редактор)
Область применения: 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, добавленная в конвейер, реализует одно из следующих четырех действий.
Действие | 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.
Создание конвейера сборки для непрерывной интеграции
В этом разделе показано, как создать конвейер сборки. Настройте конвейер для автоматического запуска и публикации журналов сборки при проверке изменений в решении IoT Edge.
Войдите в свою организацию Azure DevOps (
https://dev.azure.com/{your organization}
) и откройте проект, содержащий репозиторий вашего решения IoT Edge.В меню левой панели выберите Конвейеры. В центре страницы выберите Создать конвейер. Если же конвейеры сборки уже есть, нажмите кнопку Создать конвейер справа вверху.
В нижней части страницы Где ваш код? выберите Использовать классический редактор. Если нужно использовать YAML для создания конвейеров сборки проекта, см. Руководство по YAML.
Следуйте инструкциям на экране для создания конвейера.
Укажите сведения об источнике для нового конвейера сборки. Выберите Azure Repos Git в качестве источника, а затем выберите проект, репозиторий и ветвь, в которой расположен код решения IoT Edge. Затем нажмите Продолжить.
Выберите Пустое задание вместо шаблона.
После создания конвейера вы перейдете в редактор конвейера. Здесь можно изменить имя конвейера, пул агентов и спецификацию агента.
Можно выбрать пул, размещенный на сервере Майкрософт, или собственный пул, управляемый вами.
В описании конвейера выберите для своей целевой платформы правильную спецификацию агента.
Если нужно компилировать модули на платформе amd64 для контейнеров Linux, выберите ubuntu-18.04.
Если вы хотите создавать модули на платформе amd64 для контейнеров Windows 1809, вам необходимо настроить агента в Windows в локальной среде.
Если нужно компилировать модули на платформе arm32v7 или arm64 для контейнеров Linux, необходимо настроить локальный агент в Linux.
Конвейер предварительно настроен с заданием Agent job 1 (Задание агента 1). Щелкните знак "плюс" (+), чтобы добавить в задание четыре задачи: Azure IoT Edge дважды, Копирование файлов один раз и Публикация артефактов сборки один раз. Выполните поиск для каждой задачи и наведите указатель мыши на имя задачи, чтобы появилась кнопка Добавить.
После добавления всех четырех задач задание агента будет выглядеть следующим образом.
Выберите первую задачу 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
.Выберите вторую задачу Azure IoT Edge, чтобы изменить ее. Эта задача передает все образы модулей в выбранный реестр контейнеров.
Параметр Описание Показать имя Отображаемое имя автоматически изменяется при изменении поля "Действие". Действие Выберите Отправка образов модулей. Тип реестра контейнеров Используйте тип по умолчанию: Azure Container Registry
.Подписка Azure. Выберите свою подписку. Реестр контейнеров Azure Выберите тип реестра контейнеров, используемый для хранения образов модулей. Форма меняется в зависимости от выбранного типа реестра. Если вы выберете Реестр контейнеров Azure, используйте раскрывающиеся списки, чтобы выбрать подписку Azure и имя реестра контейнеров. При выборе универсального реестра контейнеров щелкните Создать, чтобы создать подключение к службе реестра. Файл template.json. Нажмите кнопку с многоточием (...) и перейдите к файлу deployment.template.json в репозитории, где содержится решение IoT Edge. Платформа по умолчанию В зависимости от целевого устройства IoT Edge выберите соответствующую операционную систему для своих модулей. Добавьте учетные данные реестра в манифест развертывания. Укажите true, чтобы добавить учетные данные реестра для отправки образов Docker в манифест развертывания. Дополнительные сведения об этой задаче и параметрах см. в статье Задача Azure IoT Edge.
Если для размещения образов модулей используется несколько реестров контейнеров, создайте дубликат этой задачи, выберите в нем другой реестр контейнеров и используйте Обойти модулив разделе настроек Дополнительно, чтобы обойти образы, не имеющие отношение к конкретному реестру.
Выберите задачу Копирование файлов, чтобы изменить ее. Эта задача предназначена для копирования файлов в каталог временного размещения артефактов.
Параметр Описание Показать имя Используйте имя по умолчанию или измените его. Исходная папка Папка с копируемыми файлами. Содержимое Добавьте две строки: deployment.template.json
и**/module.json
. Эти два файла служат входными данными для создания манифеста развертывания IoT Edge.Целевая папка Задайте переменную $(Build.ArtifactStagingDirectory)
. Дополнительные сведения об описании см. в статье Переменные сборки.Дополнительные сведения об этой задаче и ее параметрах см. в статье Задача копирования файлов.
Выберите задачу Publish Build Artifacts (Публикация артефактов сборки), чтобы изменить его. Укажите путь к каталогу временного размещения артефактов для задачи, чтобы этот путь можно было опубликовать в конвейере выпуска.
Параметр Описание Показать имя Используйте имя по умолчанию или измените его. Путь для публикации Задайте переменную $(Build.ArtifactStagingDirectory)
. Дополнительные сведения см. в разделе Переменные сборки.Имя артефакта Используйте имя по умолчанию: drop. Расположение публикации артефакта Используйте расположение по умолчанию: Azure Pipelines. Дополнительные сведения об этой задаче и параметрах см. в статье Задача публикации артефактов сборки.
Откройте вкладку Триггеры и установите флажок Enable continuous integration (Включить непрерывную интеграцию). Убедитесь, что включена ветвь, содержащая ваш код.
- Выберите Сохранить в раскрывающемся списке Сохранить и поместить в очередь.
Этот конвейер настроен на автоматический запуск при отправке нового кода в репозиторий. Последняя задача, публикация артефактов конвейера, активирует конвейер выпуска. Перейдите к следующему разделу для создания конвейера выпуска.
Создание конвейера выпуска для непрерывного развертывания
В этом разделе описано, как создать конвейер выпуска, настроенный для автоматического запуска при получении артефакта от конвейера сборки и отображения журналов сборки в Azure Pipelines.
Создайте новый конвейер и добавьте новый этап:
На вкладке Выпуски в разделе Конвейеры выберите + Новый конвейер. Если у вас уже есть конвейеры выпуска, нажмите кнопку + Создать и щелкните + Создать конвейер выпуска.
Когда будет предложено выбрать шаблон, выберите с пустым заданием.
Ваш новый конвейер выпуска инициализируется с одним этапом, который называется Этап 1. Переименуйте этап 1 в разработку и работайте с ним как с конвейером непрерывного развертывания для своей среды разработки. Обычно конвейеры непрерывного развертывания состоят из нескольких этапов, в числе которых разработка, промежуточный процесс и производственная среда. Можно использовать другие имена и создать больше этапов, основываясь на своей практике разработки и выполнения операций. Закройте окно сведений об этапе после его переименования.
Также можно переименовать конвейер выпуска, выбрав вверху текст "Новый конвейер выпуска".
Свяжите выпуск с артефактами сборки, опубликованными конвейером сборки. Щелкните Add (Добавить) в области артефактов.
На странице Добавление артефакта выберите Сборка в качестве значения Тип источника. Затем выберите созданный проект и конвейер сборки. При желании Псевдоним источника можно изменить на более описательный. а затем щелкните Добавить.
Откройте триггеры артефакта и выберите переключатель для включения триггера непрерывного развертывания. Теперь новый выпуск будет создаваться каждый раз, когда новая сборка становится доступной.
Для этапа разработки заранее настроено одно задание и отсутствие задач. В меню конвейера выберите Задачи, а затем — этап разработка. Выберите Задание агента и измените его Отображаемое имя на Контроль качества. Можно настроить сведения о задании агента, но задача развертывания не зависит от платформы, поэтому можно использовать любую Спецификацию агента в выбранном Пуле агентов.
В задании контроля качества выберите знак "плюс" (+), чтобы добавить две задачи. Найдите и дважды добавьте Azure IoT Edge.
Выберите первую задачу 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}" } }
Выберите вторую задачу 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 в 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, чтобы просмотреть ход выполнения. Чтобы просмотреть журналы выходных данных задания, выберите задание.
Если выполнение конвейера сборки завершится успешно, активируется переход на этап dev. Успешный выпуск dev создает развертывание IOT Edge на целевые устройства IOT Edge.
Щелкните этап dev, чтобы просмотреть журналы выпуска.
В случае сбоя конвейера начните с просмотра журналов. Чтобы просмотреть журналы, перейдите к сводке выполнения конвейера и выберите задание и задачу. В случае сбоя конкретной задачи проверьте журналы этой задачи. Подробные инструкции по настройке и использованию журналов см. в статье Анализ журналов для диагностики проблем конвейера.
Следующие шаги
- Основные сведения о развертывании IoT Edge см. в статье Understand IoT Edge deployments for single devices or at scale (Основные сведения о развертываниях IoT Edge для отдельных устройств или в требуемом масштабе).
- Ознакомьтесь со статьей Развертывание и мониторинг модулей IoT Edge в нужном масштабе (предварительная версия), чтобы узнать, как создавать, обновлять или удалять развертывание.