Integração contínua e implantação contínua em dispositivos do Azure IoT Edge (editor clássico)
Aplica-se a: IoT Edge 1.4
Importante
IoT Edge 1.5 LTS e IoT Edge 1.4 são versões suportadas. Se tiver uma versão anterior, consulte Atualizar IoT Edge.
O Azure Pipelines inclui uma tarefa interna do Azure IoT Edge que ajuda você a adotar o DevOps com seus aplicativos do Azure IoT Edge. Este artigo demonstra como usar os recursos de integração contínua e implantação contínua do Azure Pipelines para criar, testar e implantar aplicativos de forma rápida e eficiente em seu Azure IoT Edge usando o editor clássico. Como alternativa, você pode usar YAML.
Neste artigo, você aprenderá a usar as tarefas internas do Azure IoT Edge para o Azure Pipelines para criar pipelines de compilação e liberação para sua solução IoT Edge. Cada tarefa do Azure IoT Edge adicionada ao seu pipeline implementa uma das quatro ações a seguir:
Ação | Descrição |
---|---|
Criar imagens de módulo | Pega o código da solução IoT Edge e cria as imagens de contêiner. |
Enviar imagens do módulo | Envia imagens de módulo para o registro de contêiner especificado. |
Gerar manifesto de implantação | Pega um arquivo deployment.template.json e as variáveis e, em seguida, gera o arquivo de manifesto de implantação final do IoT Edge. |
Implementar em dispositivos IoT Edge | Cria implantações do IoT Edge em um ou mais dispositivos IoT Edge. |
A menos que especificado de outra forma, os procedimentos neste artigo não exploram todas as funcionalidades disponíveis através de parâmetros de tarefa. Para obter mais informações, consulte os seguintes recursos:
- Versão da tarefa
- Avançado - Se aplicável, especifique os módulos que você não deseja criar.
- Opções de controlo
- Variáveis de Ambiente
- Variáveis de saída
Pré-requisitos
Um repositório do Azure Repos. Se você não tiver um, você pode criar um novo repositório Git em seu projeto. Para este artigo, criamos um repositório chamado IoTEdgeRepo.
Uma solução IoT Edge comprometida e enviada para o seu repositório. Se você quiser criar uma nova solução de exemplo para testar este artigo, siga as etapas em Desenvolver módulos do Azure IoT Edge usando o Visual Studio Code. Para este artigo, criamos uma solução em nosso repositório chamada IoTEdgeSolution, que tem o código para um módulo chamado filtermodule.
Para este artigo, tudo o que você precisa é da pasta de solução criada pelos modelos do IoT Edge no Visual Studio Code ou no Visual Studio. Você não precisa compilar, enviar, implantar ou depurar esse código antes de continuar. Você configurará esses processos no Azure Pipelines.
Conheça o caminho para o arquivo deployment.template.json em sua solução, que é usado em várias etapas. Se você não estiver familiarizado com a função do modelo de implantação, consulte Saiba como implantar módulos e estabelecer rotas.
Gorjeta
Se você estiver criando uma nova solução, clone seu repositório localmente primeiro. Em seguida, ao criar a solução, você pode optar por criá-la diretamente na pasta do repositório. Você pode facilmente confirmar e enviar os novos arquivos de lá.
Um registro de contêiner onde você pode enviar imagens de módulo. Você pode usar o Registro de Contêiner do Azure ou um registro de terceiros.
Um hub IoT do Azure ativo com pelo menos dois dispositivos IoT Edge para testar os estágios de implantação de teste e produção separados. Você pode seguir os artigos de início rápido para criar um dispositivo IoT Edge no Linux ou Windows
Criar um pipeline de compilação para integração contínua
Nesta seção, você cria um novo pipeline de compilação. Você configura o pipeline para ser executado automaticamente e publicar logs de compilação sempre que fizer check-in de alterações na solução IoT Edge.
Entre em sua organização do Azure DevOps (
https://dev.azure.com/{your organization}
) e abra o projeto que contém seu repositório de soluções do IoT Edge.No menu do painel esquerdo do seu projeto, selecione Pipelines. Selecione Criar pipeline no centro da página. Ou, se você já tiver pipelines de compilação, selecione o botão Novo pipeline no canto superior direito.
Na parte inferior da página Onde está seu código? , selecione Usar o editor clássico. Se você deseja usar o YAML para criar os pipelines de construção do seu projeto, consulte o guia do YAML.
Siga as instruções para criar seu pipeline.
Forneça as informações de origem para seu novo pipeline de compilação. Selecione Azure Repos Git como a origem e, em seguida, selecione o projeto, o repositório e a ramificação onde o código da solução IoT Edge está localizado. Em seguida, selecione Continuar.
Selecione Trabalho vazio em vez de um modelo.
Depois que o pipeline for criado, você será levado ao editor de pipeline. Aqui, você pode alterar o nome do pipeline, o pool de agentes e a especificação do agente.
Você pode selecionar um pool hospedado pela Microsoft ou um pool auto-hospedado que você gerencia.
Na descrição do pipeline, escolha a especificação correta do agente com base na plataforma de destino:
Se você gostaria de construir seus módulos na plataforma amd64 para contêineres Linux, escolha ubuntu-18.04
Se você gostaria de criar seus módulos na plataforma amd64 para contêineres do Windows 1809, você precisa configurar o agente auto-hospedado no Windows.
Se você gostaria de construir seus módulos na plataforma arm32v7 ou arm64 para contêineres Linux, você precisa configurar o agente auto-hospedado no Linux.
Seu pipeline vem pré-configurado com um trabalho chamado Agent job 1. Selecione o sinal de adição (+) para adicionar quatro tarefas ao trabalho: Azure IoT Edge duas vezes, Copiar arquivos uma vez e Publicar artefatos de compilação uma vez. Pesquise cada tarefa e passe o mouse sobre o nome da tarefa para ver o botão Adicionar .
Quando todas as quatro tarefas são adicionadas, seu trabalho de agente se parece com o exemplo a seguir:
Selecione a primeira tarefa do Azure IoT Edge para editá-la. Esta tarefa cria todos os módulos da solução com a plataforma de destino que você especificar. Edite a tarefa com os seguintes valores:
Parâmetro Description Display name O nome para exibição é atualizado automaticamente quando o campo Ação é alterado. Ação Selecione Construir imagens do módulo. .template.json arquivo Selecione as reticências (...) e navegue até o arquivo deployment.template.json no repositório que contém sua solução IoT Edge. Plataforma padrão Selecione o sistema operacional apropriado para seus módulos com base no dispositivo IoT Edge de destino. Variáveis de saída Forneça um nome de referência para associar ao caminho do arquivo onde o arquivo deployment.json gera, como borda. Para obter mais informações sobre essa tarefa e seus parâmetros, consulte Tarefa do Azure IoT Edge.
Essas configurações usam o repositório de imagens e a tag que são definidos no
module.json
arquivo para nomear e marcar a imagem do módulo. As imagens do módulo de compilação também ajudam a substituir as variáveis pelo valor exato definidomodule.json
no arquivo. No Visual Studio ou Visual Studio Code, você especifica o valor real em um.env
arquivo. No Azure Pipelines, você define o valor na guia Variáveis de pipeline . Selecione a guia Variáveis no menu do editor de pipeline e configure o nome e o valor da seguinte maneira:- ACR_ADDRESS: Seu valor de servidor de Logon do Registro de Contêiner do Azure. Você pode encontrar o valor do servidor de logon na página de visão geral do registro de contêiner no portal do Azure.
Se você tiver outras variáveis em seu projeto, poderá especificar o nome e o valor nesta guia. As imagens do módulo de compilação reconhecem apenas as variáveis que estão no
${VARIABLE}
formato. Certifique-se de que utiliza este formato nos seus**/module.json
ficheiros.Selecione a segunda tarefa do Azure IoT Edge para editá-la. Esta tarefa envia por push todas as imagens de módulo para o registro de contêiner selecionado.
Parâmetro Description Display name O nome para exibição é atualizado automaticamente quando o campo Ação é alterado. Ação Selecione Enviar imagens do módulo. Tipo de registro de contêiner Use o tipo padrão: Azure Container Registry
.Subscrição do Azure Escolha a sua subscrição. Registo de Contentores do Azure Selecione o tipo de registro de contêiner que você usa para armazenar as imagens do módulo. Dependendo do tipo de registro escolhido, o formulário é alterado. Se você escolher o Registro de Contêiner do Azure, use as listas suspensas para selecionar a assinatura do Azure e o nome do seu registro de contêiner. Se você escolher Registro de contêiner genérico, selecione Novo para criar uma conexão de serviço de registro. .template.json arquivo Selecione as reticências (...) e navegue até o arquivo deployment.template.json no repositório que contém sua solução IoT Edge. Plataforma padrão Selecione o sistema operacional apropriado para seus módulos com base no dispositivo IoT Edge de destino. Adicionar credencial do Registro ao manifesto de implantação Especifique true para adicionar a credencial do Registro para enviar imagens do docker para o manifesto de implantação. Para obter mais informações sobre essa tarefa e seus parâmetros, consulte Tarefa do Azure IoT Edge.
Se você tiver vários registros de contêiner para hospedar as imagens do módulo, precisará duplicar essa tarefa, selecionar registro de contêiner diferente e usar Ignorar módulo(s) nas Configurações avançadas para ignorar as imagens que não são para esse registro específico.
Selecione a tarefa Copiar arquivos para editá-la. Use esta tarefa para copiar arquivos para o diretório de preparo de artefatos.
Parâmetro Description Display name Usar o nome padrão ou personalizar Pasta de origem A pasta com os arquivos a serem copiados. Conteúdos Adicione duas linhas: deployment.template.json
e**/module.json
. Esses dois arquivos servem como entradas para gerar o manifesto de implantação do IoT Edge.Pasta de destino Especifique a variável $(Build.ArtifactStagingDirectory)
. Consulte Compilar variáveis para saber mais sobre a descrição.Para obter mais informações sobre essa tarefa e seus parâmetros, consulte Tarefa Copiar arquivos.
Selecione a tarefa Publicar artefatos de compilação para editá-la. Forneça o caminho do diretório de preparo de artefato para a tarefa para que o caminho possa ser publicado para liberar o pipeline.
Parâmetro Description Display name Use o nome padrão ou personalize. Caminho para publicação Especifique a variável $(Build.ArtifactStagingDirectory)
. Consulte Criar variáveis para saber mais.Nome do artefacto Use o nome padrão: drop Local de publicação do artefato Usar o local padrão: Azure Pipelines Para obter mais informações sobre essa tarefa e seus parâmetros, consulte Publicar tarefa de artefatos de compilação.
Abra a guia Gatilhos e marque a caixa para Habilitar integração contínua. Certifique-se de que a ramificação que contém o seu código está incluída.
- Selecione Salvar na lista suspensa Salvar fila de & .
Esse pipeline agora está configurado para ser executado automaticamente quando você envia um novo código para o repositório. A última tarefa, publicar os artefatos de pipeline, aciona um pipeline de liberação. Continue para a próxima seção para criar o pipeline de liberação.
Criar um pipeline de liberação para implantação contínua
Nesta seção, você cria um pipeline de liberação que é configurado para ser executado automaticamente quando seu pipeline de compilação solta artefatos e ele mostrará logs de implantação no Azure Pipelines.
Crie um novo pipeline e adicione um novo estágio:
Na guia Lançamentos, em Pipelines, escolha + Novo pipeline. Ou, se você já tiver pipelines de liberação, escolha o botão + Novo e selecione + Novo pipeline de liberação.
Quando solicitado a selecionar um modelo, escolha começar com um trabalho vazio.
Seu novo pipeline de liberação é inicializado com um estágio, chamado Estágio 1. Renomeie o Estágio 1 para desenvolver e tratá-lo como um pipeline de implantação contínua para seu ambiente de desenvolvimento. Normalmente, os pipelines de implantação contínua têm vários estágios, incluindo desenvolvimento, preparo e prod. Você pode usar nomes diferentes e criar mais com base em sua prática de DevOps. Feche a janela de detalhes do palco depois que ela for renomeada.
Você também pode renomear seu pipeline de liberação selecionando o texto "Novo pipeline de lançamento" na parte superior.
Vincule a versão aos artefatos de compilação publicados pelo pipeline de compilação. Clique em Adicionar na área de artefatos.
Na página Adicionar um artefato, selecione Construir como o tipo de origem. Escolha o projeto e o pipeline de construção que você criou. Se desejar, você pode alterar o alias de origem para algo mais descritivo. Em seguida, selecione Adicionar.
Abra os gatilhos de artefato e selecione a alternância para habilitar o gatilho de implantação contínua. Agora, uma nova versão será criada cada vez que uma nova compilação estiver disponível.
O estágio de desenvolvimento é pré-configurado com um trabalho e zero tarefas. No menu pipeline, selecione Tarefas e, em seguida, escolha o estágio de desenvolvimento . Selecione o trabalho do Agente e altere seu Nome para exibição para QA. Você pode configurar detalhes sobre o trabalho do agente, mas a tarefa de implantação não diferencia a plataforma para que você possa usar qualquer especificação do agente no pool de agentes escolhido.
No trabalho de QA, selecione o sinal de adição (+) para adicionar duas tarefas. Pesquise e adicione o Azure IoT Edge duas vezes.
Selecione a primeira tarefa do Azure IoT Edge e configure-a com os seguintes valores:
Parâmetro Description Display name O nome para exibição é atualizado automaticamente quando o campo Ação é alterado. Ação Selecione Generate deployment manifest
..template.json arquivo Especifique o caminho: $(System.DefaultWorkingDirectory)/Drop/drop/deployment.template.json
. O caminho é publicado a partir do pipeline de compilação.Plataforma padrão Selecione o sistema operacional apropriado para seus módulos com base no dispositivo IoT Edge de destino. Caminho de saída Coloque o caminho $(System.DefaultWorkingDirectory)/Drop/drop/configs/deployment.json
. Esse caminho é o arquivo de manifesto de implantação final do IoT Edge.Essas configurações ajudam a substituir as URLs de imagem do
deployment.template.json
módulo no arquivo. O manifesto de implantação Gerar também ajuda a substituir as variáveis pelo valor exato definido nodeployment.template.json
arquivo. No Visual Studio/Visual Studio Code, você está especificando o valor real em um.env
arquivo. No Azure Pipelines, você define o valor na guia Release Pipeline Variables . Vá para a guia Variáveis e configure o nome e o valor da seguinte maneira:- ACR_ADDRESS: Seu valor de servidor de Logon do Registro de Contêiner do Azure. Você pode recuperar o servidor de Logon na página Visão geral do seu registro de contêiner no portal do Azure.
- ACR_PASSWORD: Sua senha do Registro de Contêiner do Azure.
- ACR_USER: Seu nome de usuário do Registro de Contêiner do Azure.
Se você tiver outras variáveis em seu projeto, poderá especificar o nome e o valor nesta guia. O manifesto de implantação Gerar só pode reconhecer as variáveis que estão no
${VARIABLE}
sabor. Certifique-se de que está a utilizar este sabor nos seus*.template.json
ficheiros."registryCredentials": { "<ACR name>": { // Your Azure Container Registry **Registry name** value "username": "${ACR_USER}", "password": "${ACR_PASSWORD}", "address": "${ACR_ADDRESS}" } }
Selecione a segunda tarefa do Azure IoT Edge e configure-a com os seguintes valores:
Parâmetro Description Display name O nome para exibição é atualizado automaticamente quando o campo Ação é alterado. Ação Selecione Deploy to IoT Edge devices
.Arquivo de implantação Coloque o caminho $(System.DefaultWorkingDirectory)/Drop/drop/configs/deployment.json
. Esse caminho é o arquivo de manifesto de implantação do IoT Edge.Subscrição do Azure Selecione a assinatura que contém seu Hub IoT. Nome do Hub IoT Selecione seu hub IoT. Escolha um ou vários dispositivos Escolha se deseja que o pipeline de liberação seja implantado em um ou vários dispositivos. Se você implantar em um único dispositivo, insira o ID do dispositivo IoT Edge. Se você estiver implantando em vários dispositivos, especifique a condição de destino do dispositivo. A condição de destino é um filtro para corresponder a um conjunto de dispositivos IoT Edge no Hub IoT. Se você quiser usar tags de dispositivo como condição, precisará atualizar as tags de dispositivos correspondentes com o dispositivo gêmeo do Hub IoT. Atualize o ID de implantação do IoT Edge e a prioridade de implantação do IoT Edge nas configurações avançadas. Para obter mais informações sobre como criar uma implantação para vários dispositivos, consulte Compreender as implantações automáticas do IoT Edge. ID do dispositivo ou condição de destino Dependendo da seleção anterior, especifique um ID de dispositivo ou condição de destino para implantar em vários dispositivos. Avançado Para a ID de implantação do IoT Edge, especifique $(System.TeamProject)-$(Release.EnvironmentName)
. Essa variável mapeia o projeto e o nome da versão com seu ID de implantação do IoT Edge.Se sua tarefa envolver o uso de uma imagem que reside em um Registro Confiável do Docker privado que não é visível para a nuvem pública, você pode definir a variável de ambiente SKIP_MODULE_IMAGE_VALIDATION para
true
ignorar a validação da imagem.Selecione Salvar para salvar as alterações no novo pipeline de versão. Retorne à visualização de pipeline selecionando a guia Pipeline no menu.
Nota
Ainda não há suporte para implantações em camadas em tarefas do Azure IoT Edge no Azure DevOps.
No entanto, você pode usar uma tarefa da CLI do Azure no Azure DevOps para criar sua implantação como uma implantação em camadas. Para o valor Inline Script , você pode usar o comando az iot edge deployment create:
az iot edge deployment create -d {deployment_name} -n {hub_name} --content modules_content.json --layered true
Verifique o CI/CD do IoT Edge com os pipelines de compilação e lançamento
Para acionar um trabalho de compilação, você pode enviar por push uma confirmação para o repositório de código-fonte ou acioná-la manualmente. Nesta seção, você aciona manualmente o pipeline de CI/CD para testar se ele funciona. Em seguida, verifique se a implantação foi bem-sucedida.
No menu do painel esquerdo, selecione Pipelines e abra o pipeline de compilação que você criou no início deste artigo.
Você pode acionar um trabalho de compilação em seu pipeline de compilação selecionando o botão Executar pipeline no canto superior direito.
Revise as configurações do pipeline Executar. Em seguida, selecione Executar.
Selecione Trabalho do agente 1 para observar o progresso da execução. Você pode revisar os logs da saída do trabalho selecionando o trabalho.
Se o pipeline de compilação for concluído com êxito, ele acionará uma liberação para o estágio de desenvolvimento . A versão de desenvolvimento bem-sucedida cria a implantação do IoT Edge para dispositivos IoT Edge de destino.
Clique em estágio de desenvolvimento para ver os logs de versão.
Se o pipeline estiver falhando, comece examinando os logs. Você pode visualizar os logs navegando até o resumo de execução do pipeline e selecionando o trabalho e a tarefa. Se uma determinada tarefa estiver falhando, verifique os logs dessa tarefa. Para obter instruções detalhadas sobre como configurar e usar logs, consulte Revisar logs para diagnosticar problemas de pipeline.
Próximos passos
- Compreender a implantação do IoT Edge em Compreender as implantações do IoT Edge para dispositivos únicos ou em escala
- Percorra as etapas para criar, atualizar ou excluir uma implantação em Implantar e monitorar módulos do IoT Edge em escala.