Automatiserad publicering för kontinuerlig integrering och leverans (CI/CD)

GÄLLER FÖR: Azure Data Factory Azure Synapse Analytics

Tips

Data Factory i Microsoft Fabric är nästa generations Azure Data Factory, med en enklare arkitektur, inbyggd AI och nya funktioner. Om dataintegrering är nytt för dig börjar du med Fabric Data Factory. Befintliga ADF-arbetsbelastningar kan uppgraderas till Fabric för att få åtkomst till nya funktioner inom datavetenskap, realtidsanalys och rapportering.

Kommentar

Synapse Analytics stöder även CI/CD. Mer information finns i Synapse Analytics CI/CD-dokumentationen .

Översikt

Kontinuerlig integrering är en metod som testar varje ändring av kodbasen automatiskt. Så tidigt som möjligt följer kontinuerlig leverans testningen som sker under kontinuerlig integrering och skickar ändringar till ett mellanlagrings- eller produktionssystem.

I Azure Data Factory innebär CI/CD att flytta Data Factory-pipelines från en miljö, till exempel utveckling, testning och produktion, till en annan. Data Factory använder Azure Resource Manager mallar (ARM-mallar) för att lagra konfigurationen av dina olika Data Factory-entiteter, till exempel pipelines, datauppsättningar och dataflöden.

Det finns två föreslagna metoder för att flytta upp en datafabrik till en annan miljö:

  • Automatiserad distribution genom att använda integration av Data Factory med Azure-pipelines.
  • Manuell uppladdning av en ARM-mall genom att använda Data Factory-användarupplevelse integrering med Azure Resource Manager.

Mer information finns i Kontinuös integrering och leverans i Azure Data Factory.

Den här artikeln fokuserar på förbättringar av kontinuerlig distribution och den automatiserade publiceringsfunktionen för CI/CD.

Förbättringar av kontinuerlig distribution

Den automatiserade publiceringsfunktionen tar funktionerna Verifiera alla och Exportera ARM-mallar från Data Factory-användarupplevelsen och gör logiken förbrukningsbar via ett offentligt tillgängligt npm-paket @microsoft/azure-data-factory-utilities. Därför kan du programmatiskt utlösa dessa åtgärder i stället för att behöva gå till Data Factory-användargränssnittet och välja en knapp manuellt. Denna kapacitet ger dina CI/CD-pipelines en sannare kontinuerlig integrationsupplevelse.

Kommentar

Se till att använda Node.js version 20.x och dess kompatibla version för att undvika fel som kan uppstå på grund av paketinkompatibilitet med äldre versioner.

Aktuellt CI/CD-flöde

  1. Varje användare gör ändringar i sina privata grenar.
  2. Push to main är inte tillåtet. Användarna måste skapa en pull-begäran för att göra ändringar.
  3. Användarna måste öppna användargränssnittet för Data Factory och välja Publicera för att distribuera ändringar till Data Factory och generera ARM-mallar i publiceringsgrenen.
  4. DevOps-versionspipelinen är konfigurerad för att skapa en ny version och distribuera ARM-mallen varje gång en ny ändring skickas till publiceringsgrenen.

Diagram som visar det aktuella CI/CD-flödet.

Manuellt steg

I det aktuella CI/CD-flödet är användarupplevelsen mellanhanden för att skapa ARM-mallen. Därför måste en användare gå till Data Factory-användargränssnittet och manuellt välja Publicera för att starta ARM-mallgenereringen och släppa den i publiceringsgrenen.

Det nya CI/CD-flödet

  1. Varje användare gör ändringar i sina privata grenar.
  2. Push to main är inte tillåtet. Användarna måste skapa en pull-begäran för att göra ändringar.
  3. Azure DevOps-pipeline-bygget triggas varje gång en ny commit görs till main. Den validerar resurserna och genererar en ARM-mall som en artefakt om valideringen lyckas.
  4. DevOps-versionspipelinen är konfigurerad för att skapa en ny version och distribuera ARM-mallen varje gång en ny version är tillgänglig.

Diagram som visar det nya CI/CD-flödet.

Vad har ändrats?

  • Du har nu en byggprocess som använder en DevOps-byggpipeline.
  • Byggpipelinen använder paketet ADFUtilities (@microsoft/azure-data-factory-utilities) npm, som validerar alla resurser och genererar ARM-mallarna. Dessa mallar kan vara enkla och länkade.
  • Byggpipelinen validerar Data Factory-resurser och genererar ARM-mallen istället för Data Factory-gränssnittet (Publicera-knappen ).
  • DevOps-releasedefinitionen förbrukar nu denna nya byggpipeline istället för Git-artefakten.

Kommentar

Du kan fortsätta att använda den befintliga mekanismen, som är grenen adf_publish , eller så kan du använda det nya flödet. Båda stöds.

Paketöversikt

Två kommandon är för närvarande tillgängliga i paketet:

  • Exportera ARM-mall
  • Validera

Exportera ARM-mall

Kör npm run build export <rootFolder> <factoryId> [outputFolder] för att exportera ARM-mallen med hjälp av resurserna i en viss mapp. Detta kommando kör också en valideringskontroll innan ARM-mallen genereras. Här är ett exempel som använder en resursgrupp som heter testResourceGroup:

npm run build export C:\DataFactories\DevDataFactory /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/testResourceGroup/providers/Microsoft.DataFactory/factories/DevDataFactory ArmTemplateOutput
  • RootFolder är ett obligatoriskt fält som representerar var Data Factory-resurserna finns.
  • FactoryId är ett obligatoriskt fält som representerar datafabrikens resurs-ID i formatet /subscriptions/<subId>/resourceGroups/<rgName>/providers/Microsoft.DataFactory/factories/<dfName>.
  • OutputFolder är en valfri parameter som anger den relativa sökvägen för att spara den genererade ARM-mallen.

Möjligheten att stoppa/starta endast de uppdaterade triggers är nu allmänt tillgänglig och slås ihop med föregående kommando.

Kommentar

ARM-mallen som genereras publiceras inte i den aktiva versionen av fabriken. Distributionen bör utföras med hjälp av en CI/CD-pipeline.

Validera

Kör npm run build validate <rootFolder> <factoryId> för att verifiera alla resurser i en viss mapp. Här är ett exempel:

npm run build validate C:\DataFactories\DevDataFactory /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/testResourceGroup/providers/Microsoft.DataFactory/factories/DevDataFactory
  • RootFolder är ett obligatoriskt fält som representerar var Data Factory-resurserna finns.
  • FactoryId är ett obligatoriskt fält som representerar datafabrikens resurs-ID i formatet /subscriptions/<subId>/resourceGroups/<rgName>/providers/Microsoft.DataFactory/factories/<dfName>.

Skapa en Azure pipeline

Även om npm-paket kan konsumeras på olika sätt, är en av de främsta fördelarna att de konsumeras via Azure-pipelines. Vid varje sammanslagning i din samarbetsgren kan en pipeline triggas som först validerar all kod och sedan exporterar ARM-mallen till en byggartefakt som kan konsumeras av en releasepipeline. Hur det skiljer sig från nuvarande CI/CD-processen är att du riktar din releasepipeline mot denna artefakt istället för den befintliga adf_publish grenen.

Följ dessa steg för att komma igång:

  1. Öppna ett Azure DevOps projekt och gå till Pipelines. Välj Ny pipeline.

    Skärmdump som visar knappen Ny pipeline.

  2. Välj den lagringsplats där du vill spara YAML-skriptet för pipelinen. Spara den i en byggmapp i samma repository som dina Data Factory-resurser. Kontrollera att det finns en package.json fil på lagringsplatsen som innehåller paketnamnet, som du ser i följande exempel:

    {
        "scripts":{
            "build":"node node_modules/@microsoft/azure-data-factory-utilities/lib/index"
        },
        "dependencies":{
            "@microsoft/azure-data-factory-utilities":"^1.0.0"
        }
    } 
    
  3. Välj Startpipeline. Om du har laddat upp eller sammanfogat YAML-filen, som du ser i följande exempel, kan du också peka direkt på den och redigera den.

    Skärmbild som visar Start-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: '20.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 template" 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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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. Ange DIN YAML-kod. Använd YAML-filen som utgångspunkt.

  5. Spara och kör. Om du använde YAML utlöses den varje gång huvudgrenen uppdateras. Bekräfta att körningen lyckas och ger artefakten ArmTemplates i pipelinens publicerade artefakter.

Kommentar

De genererade artefakterna innehåller redan skript före och efter utrullning för triggers, så du behöver inte lägga till dem manuellt. Men när du distribuerar måste du fortfarande referera till dokumentationen om att stoppa och starta triggers för att köra det medföljande skriptet.

Lär dig mer om kontinuerlig integration och leverans i Data Factory: Kontinuerlig integration och leverans i Azure Data Factory.