Publicera Bicep-kod från en distributionspipeline

Slutförd

När du automatiserar publiceringsprocessen för en mallspecifikation eller en Bicep-modul måste du se till att allt du normalt gör manuellt kan automatiseras och köras i pipelinen. I den här lektionen tillämpar du principer som du tidigare har lärt dig för att publicera mallspecifikationer och Bicep-moduler från en distributionspipeline.

Mallspecifikationer och -moduler

Med Bicep kan du enkelt återanvända koden. Två vanliga metoder för att återanvända Bicep-koden mellan distributioner är:

  • Mallspecifikationer som är optimerade för distribution av kompletta lösningar. Anta till exempel att du har definierat en uppsättning säkerhetshärdade resurser för att distribuera en fullständig virtuell dator enligt företagets specifikationer. Du kan publicera den här koden som en mallspecifikation. Dina kollegor kan sedan använda mallspecifikationen för att distribuera en komplett virtuell dator, även från Azure-portalen.
  • Moduler som är utformade för att vara komponenter i andra distributioner. Anta till exempel att du har skapat en Bicep-fil som skapar ett lagringskonto. Du behöver förmodligen lagringskonton i många andra distributioner, så du kan publicera Bicep-filen till ett register och använda den som en modul i organisationens distributioner.

När du bestämmer dig mellan mallspecifikationer och Bicep-moduler är en bra tumregel: om mallen ska distribueras som i hela organisationen passar mallspecifikationerna förmodligen bra. Men om du sannolikt kommer att återanvända den här mallen i flera överordnade mallar kan Bicep-moduler tjäna dina behov bättre.

Verifiera återanvändbar kod i en pipeline

Till skillnad från vanliga Bicep-distributioner distribuerar du inte resurserna direkt till Azure när du skapar en mallspecifikation eller en modul. I stället publicerar du mallspecifikationen eller modulen. Sedan kan du använda mallspecifikationen eller modulen i en annan distribution. Distributionen distribuerar sedan de resurser som du har definierat. Därför kan de sätt som du validerar och testar mallspecifikationer och Bicep-moduler skilja sig från den process som du använder för vanliga Bicep-distributioner.

Det är bra att linting din Bicep-kod. Linter identifierar syntaktiska problem och varnar dig om du inte följer de rekommenderade metoderna.

Utöver linting kan du överväga att testa mallspecifikationer och -moduler med hjälp av preflight-validering. Du kan till och med överväga att distribuera mallspecifikationer och moduler till Azure och testa att de resurser de skapar fungerar som förväntat. Det kan dock vara svårt att köra dessa typer av tester från en distributionspipeline av två skäl:

  • För validering och distributioner krävs en Azure-miljö för att distribuera resurserna till. Du kan behöva underhålla en dedikerad Azure-prenumeration eller resursgrupp som ska användas för att distribuera och testa dina moduler.
  • Många mallspecifikationer och moduler kräver att du anger en uppsättning parametrar. Du kan behöva skapa en testuppsättning med parametrar för mallspecifikationer eller -moduler som ska användas när de distribueras.

Du måste bestämma om du vill inkludera pipelinesteg som distribuerar och testar mallspecifikationer och moduler. I den här Microsoft Learn-modulen lintar vi Bicep-koden men inkluderar inte andra former av testning. Om du vill testa mallspecifikationer och moduler bör du överväga hur du distribuerar dem till Azure. Fundera också på om du vill använda dedikerade prenumerationer eller resursgrupper för att distribuera resurserna.

Dricks

Vi rekommenderar att du läser Testa din Bicep-kod med hjälp av Azure Pipelines för mer information om hur du testar dina Bicep-filer i en automatiserad pipeline.

Autentisering och auktorisering

När du publicerar mallspecifikationer till Azure själv måste din Microsoft Entra-användare beviljas åtkomst till resursgruppen som innehåller mallspecifikationsresursen. På samma sätt måste din Microsoft Entra-användare ha behörighet att skriva till den Azure Container Registry-instans som din organisation använder för sina Bicep-moduler när du publicerar en Bicep-modul till ett register.

När du arbetar med en automatiserad distributionspipeline gäller samma principer. Men eftersom du inte är den person som kör distributionen måste du se till att pipelinens tjänsthuvudnamn ges lämplig åtkomst till resursgruppen för publicering av mallspecifikationen eller till containerregistret för publicering av moduler.

Dricks

När du publicerar en modul till ett register behöver tjänstens huvudnamn som kör distributionen förmodligen inte mycket behörighet. När ditt register använder Microsoft Entra-auktorisering behöver tjänstens huvudnamn endast AcrPush-behörigheten i registret.

Överväg att använda säkerhetsprincipen för lägsta behörighet. Ange pipelinens tjänsthuvudnamn med åtkomst endast till containerregistret och inte till en resursgrupp eller prenumeration.

Publicera mallspecifikationer och moduler från en pipeline

När du publicerar en mallspecifikation från din egen dator med hjälp av Azure CLI använder du ett kommando som liknar följande:

az ts create \
  --name StorageWithoutSAS \
  --resource-group MyResourceGroup \
  --location westus3 \
  --display-name "Storage account with SAS disabled" \
  --description "This template spec creates a storage account, which is preconfigured to disable SAS authentication." \
  --version 1 \
  --template-file main.bicep

Du kan konvertera det här Azure CLI-kommandot till ett pipelinesteg:

- task: AzureCLI@2
  name: Publish
  displayName: Publish template spec
  inputs:
    azureSubscription: $(ServiceConnectionName)
    scriptType: 'bash'
    scriptLocation: 'inlineScript'
    inlineScript: |
      az ts create \
        --name StorageWithoutSAS \
        --resource-group MyResourceGroup \
        --location westus3 \
        --display-name "Storage account with SAS disabled" \
        --description "This template spec creates a storage account, which is preconfigured to disable SAS authentication." \
        --version 1 \
        --template-file main.bicep

Pipelinen använder samma process för att publicera mallspecifikationen som du skulle använda själv.

På samma sätt använder du ett kommando som liknar följande när du publicerar en Bicep-modul från din egen dator med hjälp av Azure CLI:

az bicep publish \
   --file module.bicep \
   --target 'br:toycompany.azurecr.io/mymodules/myqueue:2'

Du kan också konvertera det här Azure CLI-kommandot till ett pipelinesteg:

- task: AzureCLI@2
  name: Publish
  displayName: Publish Bicep module
  inputs:
    azureSubscription: $(ServiceConnectionName)
    scriptType: 'bash'
    scriptLocation: 'inlineScript'
    inlineScript: |
      az bicep publish \
        --file module.bicep \
        --target 'br:toycompany.azurecr.io/mymodules/myqueue:2'

Dricks

I det här exemplet är Bicep-registrets värdnamn (toycompany.azurecr.io) inbäddat i pipelinestegdefinitionen. Det här är ingen bra idé. Du kan använda miljövariabler för att ange konfigurationsinställningar som detta. Du får se hur detta fungerar senare i den här Microsoft Learn-modulen.

Hur du publicerar en mallspecifikation från en pipeline beskrivs i den här lektionen.

Använda en modul eller mallspecifikation

I tidigare Microsoft Learn-utbildningsmoduler lärde du dig hur du distribuerar de resurser som definierats i mallspecifikationer och hur du använder Bicep-moduler som lagras i register. Oavsett om du publicerar mallspecifikationer och moduler manuellt eller från en distributionspipeline använder och distribuerar du dem på samma sätt.

Du kan till exempel distribuera en mallspecifikation eller en Bicep-fil till en resursgrupp med hjälp az deployment group create av Azure CLI-kommandot eller cmdleten New-AzResourceGroupDeployment med Azure PowerShell.