Publicação automatizada para CI/CD (integração contínua e entrega contínua)

APLICA-SE A: Azure Data Factory Azure Synapse Analytics

Dica

Experimente o Data Factory no Microsoft Fabric, uma solução de análise tudo-em-um para empresas. O Microsoft Fabric abrange desde movimentação de dados até ciência de dados, análise em tempo real, business intelligence e relatórios. Saiba como iniciar uma avaliação gratuita!

Observação

O Synapse Analytics também dá suporte à CI/CD. Veja a documentação de CI/CD do Synapse Analytics para obter mais informações.

Visão geral

Integração contínua é a prática de testar cada alteração feita em sua base de código automaticamente. O quanto antes possível, a entrega contínua segue o teste que acontece durante a integração contínua e envia as alterações para um sistema de preparo ou produção.

No Azure Data Factory, CI/CD significa mover os pipelines do Data Factory de um ambiente, como desenvolvimento, teste e produção, para outro. O Azure Data Factory utiliza modelos do Azure Resource Manager (ARM) para armazenar a configuração de suas várias entidades do Azure Data Factory (pipelines, conjuntos de dados, fluxos e assim por diante).

Há dois métodos sugeridos para promover um data factory para outro ambiente:

  • Implantação automatizada usando a integração do Data Factory com Azure Pipelines.
  • Carregando manualmente um modelo ARM usando a integração da experiência do usuário do Data Factory com o Azure Resource Manager.

Para obter mais informações, consulte Integração e entrega contínuas em Azure Data Factory.

Este artigo se concentra nas melhorias de implantação contínua e no recurso de publicação automatizada para CI/CD.

Melhorias de implantação contínua

O recurso de publicação automatizada usa os recursos de Validar tudo e o modelo Exportar ARM da experiência do usuário do Data Factory e torna a lógica consumível por meio de um pacote npm disponível publicamente @microsoft/azure-data-factory-utilities. Por esse motivo, você pode disparar programaticamente essas ações em vez de ter que ir para a interface do usuário do Data Factory e selecionar um botão manualmente. Essa funcionalidade fornecerá aos pipelines de CI/CD uma experiência de integração contínua mais verdadeira.

Observação

Certifique-se de usar o nó versão 18.x e sua versão compatível para evitar erros que podem ocorrer devido à incompatibilidade do pacote com versões mais antigas.

Fluxo de CI/CD atual

  1. Cada usuário faz alterações em suas ramificações privadas.
  2. O push para o mestre não é permitido. Os usuários devem criar uma solicitação de pull para fazer alterações.
  3. Os usuários devem carregar a interface do usuário do Data Factory e selecionar Publicar para implantar alterações no Data Factory e gerar os modelos do ARM na ramificação de publicação.
  4. O pipeline de lançamento do DevOps é configurado para criar uma nova versão e implantar o modelo do ARM sempre que uma nova alteração é enviada por push para o branch de publicação.

Diagram that shows the current CI/CD flow.

Etapa manual

No fluxo de CI/CD atual, a experiência do usuário é o intermediário para criar o modelo do ARM. Como resultado, um usuário deve ir para a interface do usuário do Data Factory e selecionar manualmente Publicar para iniciar a geração do modelo ARM e soltá-lo na ramificação de publicação.

O novo fluxo de CI/CD

  1. Cada usuário faz alterações em suas ramificações privadas.
  2. O push para o mestre não é permitido. Os usuários devem criar uma solicitação de pull para fazer alterações.
  3. A compilação do pipeline DevOps do Azure é disparada sempre que uma nova confirmação é feita no mestre. Ele validará os recursos e gerará um modelo de ARM como um artefato se a validação for realizada com sucesso.
  4. O pipeline de liberação do DevOps é configurado para criar uma nova versão e implantar o modelo ARM sempre que uma nova build estiver disponível.

Diagram that shows the new CI/CD flow.

O que mudou?

  • Agora temos um processo de compilação que usa um pipeline de build do DevOps.
  • O pipeline de build usa o pacote ADFUtilities NPM, que validará todos os recursos e gerará os modelos de ARM. Esses modelos podem ser únicos e vinculados.
  • O pipeline de build é responsável por validar os recursos do Data Factory e gerar o modelo ARM em vez da interface do usuário do Data Factory (botãoPublicar ).
  • A definição de versão DevOps agora consumirá esse novo pipeline de Build em vez do artefato Git.

Observação

Você pode continuar a usar o mecanismo existente, que é o branch adf_publish, ou pode usar o novo fluxo. Ambos têm suporte.

Visão geral do pacote

Dois comandos estão disponíveis no momento no pacote:

  • Exportar modelo ARM
  • Validar

Exportar modelo ARM

Execute npm run build export <rootFolder> <factoryId> [outputFolder] para exportar o modelo ARM usando os recursos de uma determinada pasta. Esse comando também executa uma verificação de validação antes de gerar o modelo ARM. Veja um exemplo usando um grupo de recursos chamado testResourceGroup:

npm run build export C:\DataFactories\DevDataFactory /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/testResourceGroup/providers/Microsoft.DataFactory/factories/DevDataFactory ArmTemplateOutput
  • RootFolder é um campo obrigatório que representa onde os recursos de Data Factory estão localizados.
  • FactoryId é um campo obrigatório que representa a ID de recurso de Data Factory no formato /subscriptions/<subId>/resourceGroups/<rgName>/providers/Microsoft.DataFactory/factories/<dfName>.
  • OutputFolder é um parâmetro opcional que especifica o caminho relativo para salvar o modelo ARM gerado.

A capacidade de parar/iniciar somente os gatilhos atualizados agora está geralmente disponível e é mesclada no comando mostrado acima.

Observação

O modelo ARM gerado não é publicado na versão em tempo real da fábrica. A implantação deve ser feita usando um pipeline de CI/CD.

Validar

Execute npm run build validate <rootFolder> <factoryId> para validar todos os recursos de uma determinada pasta. Veja um exemplo:

npm run build validate C:\DataFactories\DevDataFactory /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/testResourceGroup/providers/Microsoft.DataFactory/factories/DevDataFactory
  • RootFolder é um campo obrigatório que representa onde os recursos de Data Factory estão localizados.
  • FactoryId é um campo obrigatório que representa a ID de recurso de Data Factory no formato /subscriptions/<subId>/resourceGroups/<rgName>/providers/Microsoft.DataFactory/factories/<dfName>.

Criar um pipeline do Azure

Embora os pacotes npm possam ser consumidos de várias maneiras, um dos principais benefícios é consumido por meio do Azure Pipeline. Em cada mesclagem em sua ramificação de colaboração, um pipeline pode ser disparado que primeiro valida todo o código e, em seguida, exporta o modelo do ARM para um artefato de build que pode ser consumido por um pipeline de lançamento. A diferença entre o processo de CI/CD atual é que você apontará seu pipeline de lançamento neste artefato em vez do branch adf_publish existente.

Siga estas etapas para começar:

  1. Abra um projeto DevOps do Azure e vá para Pipelines. Selecione Novo Pipeline.

    Screenshot that shows the New pipeline button.

  2. Selecione o repositório no qual você deseja salvar o script YAML do pipeline. É recomendável salvá-lo em uma pasta de build no mesmo repositório de seus recursos de Data Factory. Verifique se há um arquivo package.json no repositório que contém o nome do pacote, conforme mostrado no exemplo a seguir:

    {
        "scripts":{
            "build":"node node_modules/@microsoft/azure-data-factory-utilities/lib/index"
        },
        "dependencies":{
            "@microsoft/azure-data-factory-utilities":"^1.0.0"
        }
    } 
    
  3. Selecione Pipeline de início. Se você carregou ou mesclou o arquivo YAML, conforme mostrado no exemplo a seguir, você também pode apontar diretamente para ele e editá-lo.

    Screenshot that shows Starter pipeline.

    # Sample YAML file to validate and export an ARM template into a build artifact
    # Requires a package.json file located in the target repository
    
    trigger:
    - main #collaboration branch
    
    pool:
      vmImage: 'ubuntu-latest'
    
    steps:
    
    # Installs Node and the npm packages saved in your package.json file in the build
    
    - task: UseNode@1
      inputs:
        version: '18.x'
      displayName: 'Install Node.js'
    
    - task: Npm@1
      inputs:
        command: 'install'
        workingDir: '$(Build.Repository.LocalPath)/<folder-of-the-package.json-file>' #replace with the package.json folder
        verbose: true
      displayName: 'Install npm package'
    
    # Validates all of the Data Factory resources in the repository. You'll get the same validation errors as when "Validate All" is selected.
    # Enter the appropriate subscription and name for the source factory. Either of the "Validate" or "Validate and Generate ARM temmplate" options are required to perform validation. Running both is unnecessary.
    
    - task: Npm@1
      inputs:
        command: 'custom'
        workingDir: '$(Build.Repository.LocalPath)/<folder-of-the-package.json-file>' #replace with the package.json folder
        customCommand: 'run build validate $(Build.Repository.LocalPath)/<Root-folder-from-Git-configuration-settings-in-ADF> /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/<Your-ResourceGroup-Name>/providers/Microsoft.DataFactory/factories/<Your-Factory-Name>'
      displayName: 'Validate'
    
    # Validate and then generate the ARM template into the destination folder, which is the same as selecting "Publish" from the UX.
    # The ARM template generated isn't published to the live version of the factory. Deployment should be done by using a CI/CD pipeline. 
    
    - task: Npm@1
      inputs:
        command: 'custom'
        workingDir: '$(Build.Repository.LocalPath)/<folder-of-the-package.json-file>' #replace with the package.json folder
        customCommand: 'run build export $(Build.Repository.LocalPath)/<Root-folder-from-Git-configuration-settings-in-ADF> /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/<Your-ResourceGroup-Name>/providers/Microsoft.DataFactory/factories/<Your-Factory-Name> "ArmTemplate"'
    #For using preview that allows you to only stop/ start triggers that are modified, please comment out the above line and uncomment the below line. Make sure the package.json contains the build-preview command. 
     #customCommand: 'run build-preview export $(Build.Repository.LocalPath) /subscriptions/222f1459-6ebd-4896-82ab-652d5f6883cf/resourceGroups/GartnerMQ2021/providers/Microsoft.DataFactory/factories/Dev-GartnerMQ2021-DataFactory "ArmTemplate"'
      displayName: 'Validate and Generate ARM template'
    
    # Publish the artifact to be used as a source for a release pipeline.
    
    - task: PublishPipelineArtifact@1
      inputs:
        targetPath: '$(Build.Repository.LocalPath)/<folder-of-the-package.json-file>/ArmTemplate' #replace with the package.json folder
        artifact: 'ArmTemplates'
        publishLocation: 'pipeline'
    
  4. Insira seu código YAML. Recomendamos que você use o arquivo YAML como um ponto de partida.

  5. Salvar e executar. Se você usou o YAML, ele será disparado toda vez que o branch principal for atualizado.

Observação

Os artefatos gerados já contêm scripts pré e pós-implantação para os gatilhos, portanto, não é necessário adicioná-los manualmente. No entanto, ao implantar um ainda seria necessário referenciar a documentação sobre como parar e iniciar gatilhos para executar o script fornecido.

Saiba mais sobre a integração e a entrega contínuas no Data Factory: integração e entrega contínuas no Azure data Factory.