Integração contínua e implantação contínua em dispositivos Azure IoT Edge (editor clássico)

Aplica-se a:marca de seleção do IoT Edge 1.4 IoT Edge 1.4

Importante

A versão com suporte é a IoT Edge 1.4. Se você estiver em uma versão anterior, confira Atualizar o Azure IoT Edge.

O Azure Pipelines contém uma tarefa interna do Azure IoT Edge que ajuda a adotar DevOps com aplicativos Azure IoT Edge. Este artigo demonstra como usar a integração contínua e recursos de implantação contínua de Azure Pipelines para criar, testar e implantar aplicativos de maneira rápida e eficiente para o Azure IoT Edge usando o editor clássico. Como alternativa, você pode usar YAML.

Diagrama dos branches de integração contínua e desenvolvimento contínuo para desenvolvimento e produção.

Neste artigo, você aprenderá como usar as tarefas internas do Azure IoT Edge para Azure Pipelines a fim de criar e liberar pipelines para a sua solução do IoT Edge. Cada tarefa do Azure IoT Edge adicionada ao seu pipeline implementa uma das quatro ações seguintes:

Ação Descrição
Criar imagens de módulo Pega o código da solução do IoT Edge e cria as imagens de contêiner.
Efetuar push de imagens de módulo Efetua o push de imagens de módulo para o registro de contêiner especificado.
Gerar o manifesto de implantação Pega um arquivo deployment.template.json e as variáveis e gera o arquivo de manifesto de implantação de IoT Edge.
Implantar em dispositivos IoT Edge Cria implantações de IoT Edge em um ou mais dispositivos IoT Edge.

A menos que especificado de outra forma, os procedimentos neste artigo não exploram toda a funcionalidade disponível por meio de parâmetros de tarefa. Para saber mais, consulte os recursos a seguir:

Pré-requisitos

  • Um repositório do Azure Repos. Se você não tem um, crie um novo repositório Git no seu projeto. Neste artigo, criamos um repositório chamado IoTEdgeRepo.

  • Uma solução do IoT Edge confirmada e enviada para seu repositório. Se você quiser criar uma nova solução de exemplo para testar este artigo, siga as etapas em Desenvolver módulos de IoT Edge do Azure usando 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, você só precisa da pasta da solução criada pelos modelos do IoT Edge no Visual Studio Code ou no Visual Studio. Não é necessário compilar, efetuar push, implantar ou depurar esse código antes de continuar. Você configura esses processos no Azure Pipelines.

    Saiba qual é o caminho para o arquivo deployment.template.json na solução, que é usado em várias etapas. Se você não estiver familiarizado com a função do modelo de implantação, confira Saiba como implantar módulos e estabelecer rotas.

    Dica

    Se você está criando uma nova solução, clone o repositório localmente primeiro. Depois, ao criar a solução, escolha criá-la diretamente na pasta do repositório. É possível confirmar e efetuar push dos novos arquivos facilmente por lá.

  • Um registro de contêiner em que você possa efetuar push de imagens de módulo. Você pode usar um Registro de Contêiner do Azure ou um registro de terceiros.

  • Um hub IoT do Azure ativo com pelo menos dois dispositivos do IoT Edge para testar as fases de implantação de teste e produção separadas. Você pode seguir os artigos de início rápido para criar um dispositivo do IoT Edge no Linux ou Windows

Criar um pipeline de build para integração contínua

Nesta seção, você criará um novo pipeline de build. Configure o pipeline para ser executado automaticamente e publica os logs de compilação sempre que faz o check-in das alterações na solução IoT Edge.

  1. Entre em sua organização do Azure DevOps (https://dev.azure.com/{your organization}) e abra o projeto que contém o repositório da solução do IoT Edge.

    Captura de tela que mostra como abrir seu projeto de DevOps.

  2. No menu do painel esquerdo em seu projeto, selecione Pipelines. Selecione Criar Pipeline no centro da página. Ou, se você já tem um pipeline de build, selecione o botão Novo pipeline na parte superior direita.

    Captura de tela que mostra como criar um pipeline de build.

  3. Na parte inferior da página Onde está seu código? , selecione Usar o editor clássico. Se você quiser usar o YAML para criar pipelines de build do projeto, confira o Guia do YAML.

    Captura de tela que mostra como usar o editor clássico.

  4. Siga os prompts para criar o pipeline.

    1. Forneça as informações de origem para o novo pipeline de build. Selecione Git do Azure Repos como a origem, depois selecione o projeto, o repositório e o branch em que se encontra o código da solução do IoT Edge. Em seguida, selecione Continuar.

      Captura de tela mostrando como selecionar a origem do pipeline.

    2. Selecione Trabalho vazio ao invés de um modelo.

      Captura de tela mostrando como começar com um trabalho vazio para o pipeline de build.

  5. Após a criação do pipeline, você será direcionado para o 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 de hospedagem interna que você gerencia.

    Na descrição do pipeline, escolha a especificação de agentes correta com base em sua plataforma de destino:

    Configurar a especificação do agente de build.

  6. O pipeline vem pré-configurado com um trabalho chamado Trabalho do agente 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 build uma vez. Pesquise cada tarefa e passe o mouse sobre o nome da tarefa para ver o botão Adicionar.

    Adicionar tarefa do Azure IoT Edge.

    Quando as quatro tarefas forem adicionadas, seu trabalho do agente será semelhante ao exemplo a seguir:

    Quatro tarefas no pipeline de build.

  7. Selecione a primeira tarefa Azure IoT Edge para editá-la. Essa tarefa compila todos os módulos na solução com a plataforma de destino especificada. Edite as tarefas com os valores a seguir:

    Parâmetro Descrição
    Nome de exibição O nome de exibição é atualizado automaticamente quando o campo Ação muda.
    Ação Selecione Criar imagens de módulo.
    Arquivo .template.json selecione as reticências (...) e navegue até o arquivo deployment.template.json no repositório que contém sua solução do IoT Edge.
    Plataforma padrão Selecione o sistema operacional adequado para os módulos com base no dispositivo do IoT Edge de destino.
    Variáveis de saída Forneça um nome de referência para associar ao caminho do arquivo em que o arquivo deployment.json é gerado, como edge.

    Para obter mais informações sobre essa tarefa e seus parâmetros, confira a tarefa do Azure IoT Edge.

    Essas configurações usam o repositório de imagens e a tag que são definidos no arquivo module.json para nomear e marcar a imagem do módulo. Compilar imagens de módulo também ajuda a substituir as variáveis pelo valor exato definido no arquivo module.json. No Visual Studio ou no Visual Studio Code, especifique o valor real em um arquivo .env. No Azure Pipelines, defina 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: o valor de Servidor de logon do Registro de Contêiner do Azure. É possível encontrar o valor do servidor de logon na página 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 nessa guia. Compilar imagens de módulo reconhece apenas variáveis que estão no formato ${VARIABLE}. Certifique-se de usar esse formato em seus arquivos **/module.json.

  8. Selecione a segunda tarefa Azure IoT Edge para editá-la. Essa tarefa efetua push de todas as imagens de módulo para o registro de contêiner selecionado.

    Parâmetro Descrição
    Nome de exibição O nome de exibição é atualizado automaticamente quando o campo Ação muda.
    Ação Selecione Efetuar push de imagens de módulo.
    Tipo de registro de contêiner Use o tipo padrão: Azure Container Registry.
    Assinatura do Azure Escolha sua assinatura.
    Registro de Contêiner do Azure selecione o tipo de registro de contêiner usado para armazenar as imagens de módulo. Dependendo do tipo de registro escolhido, o formulário é alterado. Se você escolher Registro de Contêiner do Azure, use as listas suspensas para selecionar a assinatura do Azure e o nome do 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.
    Arquivo .template.json selecione as reticências (...) e navegue até o arquivo deployment.template.json no repositório que contém sua solução do IoT Edge.
    Plataforma padrão Selecione o sistema operacional adequado para os módulos com base no dispositivo do 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 ao manifesto de implantação.

    Para obter mais informações sobre essa tarefa e seus parâmetros, confira a tarefa do Azure IoT Edge.

    Se você tiver vários registros de contêiner para hospedar suas imagens de módulo, você precisará duplicar essa tarefa, selecionar o registro de contêiner diferente e usar Ignorar módulos nas configurações Avançadas para ignorar as imagens que não são para esse registro específico.

  9. Selecione a tarefa Copiar Arquivos para editá-la. Use essa tarefa para copiar arquivos para o diretório de teste do artefato.

    Parâmetro Descrição
    Nome de exibição Use o nome padrão ou personalize
    Pasta de Origem A pasta com os arquivos a serem copiados.
    Sumário 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). Confira Criar variáveis para saber mais sobre a descrição.

    Para obter mais informações sobre essa tarefa e seus parâmetros, confira a tarefa de cópia de arquivos.

  10. Selecione a tarefa Publicar artefatos de build para editá-la. Forneça o caminho do diretório de preparo do artefato para a tarefa para que o caminho possa ser publicado no pipeline de lançamento.

    Parâmetro Descrição
    Nome de exibição Use o nome padrão ou personalize.
    Caminho para publicar Especifique a variável $(Build.ArtifactStagingDirectory). Confira Criar variáveis para saber mais.
    Nome do artefato Use o nome padrão: drop
    Local de publicação do artefato Use o local padrão: Azure Pipelines

    Para obter mais informações sobre essa tarefa e seus parâmetros, confira a tarefa de publicação de artefatos de compilação.

  11. Abra a guia Gatilhos e marque a caixa Ativar integração contínua. Verifique se o branch que contém seu código está incluído.

Captura de tela mostrando como ativar o gatilho de integração contínua.

  1. Selecione Salvar na lista suspensa Salvar e enfileirar.

Agora esse pipeline está configurado para ser executado automaticamente quando você efetuar push do novo código para seu repositório. A última tarefa, publicar os artefatos do pipeline, dispara um pipeline de lançamento. Acesse a próxima seção para compilar o pipeline de lançamento.

Crie um pipeline de lançamento para implantação contínua

Nesta seção, crie um pipeline de lançamento configurado para ser executado automaticamente quando o pipeline de build deixar de ter artefatos e para mostrar logs de implantação no Azure Pipelines.

Crie um novo pipeline e adicione um novo estágio:

  1. Na guia Versões em Pipelines, selecione +Novo pipeline. Ou, se você já tiver pipelines de lançamento, escolha o botão +Novo e clique em +Novo pipeline de lançamento.

    Adicione um pipeline de lançamento usando o botão +Novo pipeline

  2. Quando tiver que selecionar um modelo, escolha começar com um Trabalho vazio.

    Iniciar com um trabalho vazio para o pipeline de lançamento

  3. O novo pipeline de lançamento é iniciado com um estágio, chamado Estágio 1. Renomeie o Estágio 1 como dev e trate-o 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 dev, preparoe prod. Você pode usar nomes diferentes e criar mais com base em sua prática DevOps. Feche a janela de detalhes do estágio depois de renomeá-lo.

    Você também pode renomear seu pipeline de lançamento selecionando o texto "Novo pipeline de lançamento" na parte superior.

  4. Vincule a versão aos artefatos de build publicados pelo pipeline de build. Clique em Adicionar na área de artefatos.

    Clique em Adicionar na área de artefatos da interface

  5. Na página Adicionar um artefato, selecione Construir como o tipo Origem. Em seguida, selecione o projeto e o pipeline de build que você criou. Se desejar, você pode alterar o Alias de origem para algo mais descritivo. Em seguida, selecione Adicionar.

    Na página Adicionar um artefato, selecione Adicionar para criar o artefato

  6. Abra os gatilhos de artefato e selecione o botão de alternância para habilitar o gatilho de implantação contínua. Agora, uma nova versão será criada sempre que um novo build estiver disponível.

    Abra os gatilhos do artefato e alterne para habilitar o gatilho de implantação contínua

  7. O estágio dev é pré-configurado com um trabalho e nenhuma tarefa. No menu do pipeline, selecione Tarefas, depois escolha o estágio dev. Selecione o Trabalho do agente e altere seu Nome de exibição para QA. Você pode configurar detalhes sobre o trabalho do agente, mas a tarefa de implantação é insensível à plataforma, então é possível usar qualquer especificação do Agente no pool do Agente escolhido.

    Exibir as tarefas para o estágio dev na guia Tarefas

  8. No trabalho QA, selecione o sinal de adição ( + ) para adicionar duas tarefas. Pesquise e adicione Azure IoT Edge duas vezes.

  9. Selecione a primeira tarefa do Azure IoT Edge e configure-a com os seguintes valores:

    Parâmetro Descrição
    Nome de exibição O nome de exibição é atualizado automaticamente quando o campo Ação muda.
    Ação Selecione Generate deployment manifest.
    arquivo .template.json Especifique o caminho: $(System.DefaultWorkingDirectory)/Drop/drop/deployment.template.json. O caminho é publicado a partir do pipeline de build.
    Plataforma padrão Selecione o sistema operacional adequado para os módulos com base no dispositivo do 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 IoT Edge final.

    Essas configurações ajudam a substituir os URLs de imagem de módulo no arquivo deployment.template.json. O manifesto Gerar implantação também ajuda a substituir as variáveis pelo valor exato que você definiu no arquivo deployment.template.json. No Visual Studio/Visual Studio Code, você está especificando o valor real em um .env arquivo. Em Azure Pipelines, defina o valor na guia Variáveis de pipeline de lançamento. Mova para a guia Variáveis e configure o nome e o valor da seguinte maneira:

    • ACR_ADDRESS: o valor do servidor de Login do Registro de Contêiner do Azure. Você pode recuperar o servidor de Logon da 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 Gerar implantação só pode reconhecer as variáveis que estão no tipo ${VARIABLE}. Verifique se você está usando essa variante em seus arquivos *.template.json.

    "registryCredentials": {
      "<ACR name>": { // Your Azure Container Registry **Registry name** value
        "username": "${ACR_USER}",
        "password": "${ACR_PASSWORD}",
        "address": "${ACR_ADDRESS}"
      }
    }
    

    Configure as variáveis para o pipeline de lançamento na guia Variáveis

  10. Selecione a segunda tarefa do Azure IoT Edge e configure-a com os seguintes valores:

    Parâmetro Descrição
    Nome de exibição O nome de exibição é atualizado automaticamente quando o campo Ação muda.
    Ação Selecione Deploy to IoT Edge devices.
    Arquivo de implantação Coloque o caminho $(System.DefaultWorkingDirectory)/Drop/drop/configs/deployment.json. Este caminho é o arquivo de manifesto de implantação do IoT Edge.
    Assinatura do Azure selecione a assinatura que contém seu Hub IoT.
    Nome do Hub IoT Selecione seu Hub IoT.
    Escolha um/vários dispositivos Escolha se deseja que o pipeline de lançamento seja implantado em um ou vários dispositivos. Se quiser implantar em um único dispositivo, insira a ID do dispositivo do IoT Edge. Se 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 do IoT Edge e IoT Hub. Se você quiser usar tags de dispositivo como a condição, você precisa atualizar suas tags de dispositivos correspondentes com o dispositivo gêmeo do Hub IoT. Atualize a ID de implantação do IoT Edge e a prioridade de implantação do IoT Edge nas configurações avançadas. Para saber mais sobre como criar uma implantação em vários dispositivos, confira Entender as implantações automáticas do IoT Edge.
    ID do dispositivo ou condição de destino Dependendo da seleção anterior, especifique uma ID do dispositivo ou uma 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 sua ID de implantação IoT Edge.

    Se sua tarefa envolve o uso de uma imagem que reside em um Docker Trusted Registry 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 para ignorar a validação da imagem.

    Adicionar tarefas do Azure IoT Edge para seu estágio dev

  11. Selecione Salvar para salvar as alterações no novo pipeline de lançamento. Retorne para o modo de exibição do pipeline selecionando a guia Pipeline no menu.

Observação

Implantações em camadas ainda não são compatíveis com as tarefas do Azure IoT Edge no Azure DevOps.

No entanto, você pode usar uma tarefa de CLI do Azure no Azure DevOps para criar sua implantação como uma implantação em camadas. Para o valor de Script Embutido, 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

Verificar o CI/CD do IoT Edge com os pipelines de lançamento e de build

Para disparar um trabalho de build, você pode efetuar push da confirmação do repositório do código-fonte ou dispará-lo manualmente. Nesta seção, dispare manualmente o pipeline de CI/CD para testar o funcionamento dele. Em seguida, verifique se a implantação é bem-sucedida.

  1. No menu do painel esquerdo, selecione Pipelines e abra o pipeline de build que você criou no início deste artigo.

  2. Você pode acionar um trabalho de compilação em seu pipeline de build selecionando o botão Executar pipeline no canto superior direito.

    Acione manualmente o pipeline de build usando o botão Executar pipeline

  3. Revise as configurações do Executar pipeline. Em seguida, selecione Executar.

    Especifique as opções de execução do pipeline e selecione Executar

  4. Selecione Trabalho do agente 1 para observar o progresso da execução. Você pode revisar os registros de saída do trabalho selecionando o trabalho.

    Revise a saída do registro do trabalho

  5. Se o pipeline de build concluir com êxito, ele disparará uma versão para o estágio dev. A versão dev bem-sucedida cria implantação do IoT Edge para dispositivos IoT Edge.

    Versão para dev

  6. Clique em estágio dev para ver os logs de liberação.

    Logs de lançamento

  7. Se o seu pipeline estiver falhando, comece examinando os logs. Você pode exibir os logs navegando até o resumo de execução de 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 Examinar logs para diagnosticar problemas de pipeline.

Próximas etapas