Distribuera Bicep-filer med hjälp av en pipeline
Nu när du har skapat en grundläggande pipeline är du redo att konfigurera pipelinen för att distribuera dina Bicep-filer. I den här lektionen får du lära dig hur du distribuerar Bicep-kod från en pipeline och hur du konfigurerar distributionsstegen.
Kommentar
Kommandona i den här enheten visas för att illustrera begrepp. Kör inte kommandona än. Du kommer att öva på det du lär dig här snart.
Tjänstanslutningar
När du distribuerar en Bicep-fil från din egen dator använder du Azure CLI eller Azure PowerShell. Innan du kan distribuera koden loggar du in på Azure. Vanligtvis ber verktygen dig att ange din e-postadress och ditt lösenord i en webbläsare. När dina autentiseringsuppgifter har verifierats bekräftas dina behörigheter för att distribuera resurser och du kan använda verktygen för att distribuera Bicep-filen.
Distribution efter pipeline kräver också autentisering. Eftersom pipelines körs utan mänsklig inblandning autentiseras pipelines till Azure med hjälp av tjänstens huvudnamn. Autentiseringsuppgifterna för tjänstens huvudnamn består av ett program-ID och en hemlighet, som vanligtvis är en nyckel eller ett certifikat. I Azure Pipelines använder du en tjänstanslutning för att lagra dessa autentiseringsuppgifter på ett säkert sätt så att din pipeline kan använda dem. En tjänstanslutning innehåller även annan information som hjälper din pipeline att identifiera den Azure-miljö som du vill distribuera till.
Dricks
I den här modulen använder du Azure DevOps för att automatiskt skapa ett huvudnamn för tjänsten när en tjänstanslutning skapas. Modulen Autentisera din Azure-distributionspipeline med hjälp av tjänstens huvudnamn ger en mer detaljerad förklaring av tjänstens huvudnamn, inklusive hur de fungerar, samt hur du skapar dem, tilldelar dem roller och hanterar dem.
När du skapar en tjänstanslutning namnger du anslutningen. Steg refererar till tjänstanslutningen med hjälp av det här namnet, så din YAML-pipelinekod behöver inte innehålla hemlig information.
När pipelinen startar har agenten som kör distributionsstegen åtkomst till tjänstanslutningen, inklusive dess autentiseringsuppgifter. Ett pipelinesteg använder autentiseringsuppgifterna för att logga in på Azure, precis som du loggar in själv. Sedan använder de åtgärder som definieras i steget tjänstens huvudnamns identitet.
Du måste se till att tjänstens huvudnamn har de behörigheter som krävs för att utföra distributionsstegen. Du kan till exempel behöva tilldela tjänstens huvudnamn rollen Deltagare för den resursgrupp som den distribuerar dina resurser till.
Varning
Det kan verka enklare att lagra tjänstens huvudnamns autentiseringsuppgifter i YAML-filen och sedan logga in med hjälp az login
av kommandot . Du bör aldrig använda den här metoden för att autentisera tjänstens huvudnamn. Autentiseringsuppgifter i en YAML-fil lagras i klartext. Alla som har åtkomst till din lagringsplats kan se och använda autentiseringsuppgifterna. Även om du begränsar åtkomsten till din Azure DevOps-organisation och ditt projekt finns YAML-filen som innehåller autentiseringsuppgifterna på den personens dator när någon klonar din lagringsplats. Det är viktigt att använda en tjänstanslutning när du arbetar med Azure från en pipeline. Tjänstanslutningar ger även andra säkerhets- och åtkomstkontrollfunktioner.
Tjänstanslutningar skapas i ditt Azure DevOps-projekt. En enda tjänstanslutning kan delas av flera pipelines. Det är dock vanligtvis en bra idé att konfigurera en tjänstanslutning och motsvarande tjänsthuvudnamn för varje pipeline och varje miljö som du distribuerar till. Den här metoden bidrar till att öka säkerheten för dina pipelines och minskar sannolikheten för att oavsiktligt distribuera eller konfigurera resurser i en annan miljö än den du förväntar dig.
Du kan också konfigurera tjänstanslutningen så att den endast kan användas i specifika pipelines. När du till exempel skapar en tjänstanslutning som distribueras till webbplatsens produktionsmiljö är det en bra idé att se till att endast webbplatsens pipeline kan använda den här tjänstanslutningen. Om du begränsar en tjänstanslutning till specifika pipelines hindras någon annan från att oavsiktligt använda samma tjänstanslutning för ett annat projekt och kan leda till att produktionswebbplatsen slutar fungera.
Distribuera en Bicep-fil med hjälp av azure-resursgruppsdistributionsaktiviteten
När du behöver distribuera en Bicep-fil från en pipeline kan du använda azure-resursgruppsdistributionsaktiviteten. Här är ett exempel på hur du konfigurerar ett steg för att använda uppgiften:
- task: AzureResourceManagerTemplateDeployment@3
inputs:
connectedServiceName: 'MyServiceConnection'
location: 'westus3'
resourceGroupName: Example
csmFile: deploy/main.bicep
overrideParameters: >
-parameterName parameterValue
Den första raden anger AzureResourceManagerTemplateDeployment@3
. Den anger för Azure Pipelines att den uppgift som du vill använda för det här steget heter AzureResourceManagerTemplateDeployment
och att du vill använda en version 3
av uppgiften.
När du använder azure-resursgruppsdistributionsaktiviteten anger du indata för att tala om för uppgiften vad den ska göra. Här följer några indata som du kan ange när du använder uppgiften:
connectedServiceName
är namnet på tjänstanslutningen som ska användas.location
måste anges även om dess värde kanske inte används. Azure Resource Group Deployment-uppgiften kan också skapa en resursgrupp åt dig, och om den gör det måste den känna till den Azure-region där resursgruppen ska skapas. I den här modulen anger du indatavärdetlocation
men dess värde används inte.resourceGroupName
anger namnet på resursgruppen som Bicep-filen ska distribueras till.overrideParameters
innehåller alla parametervärden som du vill skicka till Bicep-filen vid distributionstillfället.
När aktiviteten startar använder den tjänstanslutningen för att logga in på Azure. När aktiviteten kör den distribution som du angav har aktiviteten autentiserats. Du behöver inte köra az login
.
Köra Azure CLI- och Azure PowerShell-kommandon
Två av de mest användbara inbyggda uppgifterna i Azure Pipelines är Azure CLI- och Azure PowerShell-uppgifter. Du kan använda dessa uppgifter för att köra ett eller flera Azure CLI- eller PowerShell-kommandon.
I framtida Microsoft Learn-moduler ser du hur Azure CLI-kommandot kan hjälpa dig att automatisera fler delar av distributionsprocessen från en pipeline.
Variabler
Dina pipelines innehåller ofta värden som du vill hålla åtskilda från YAML-filen. När du till exempel distribuerar en Bicep-fil till en resursgrupp anger du namnet på resursgruppen. Resursgruppens namn är förmodligen annorlunda när du distribuerar till olika miljöer. Du kan också behöva ange parametrar för dina Bicep-filer, inklusive hemligheter, till exempel databasserverlösenord. Lagra inte dessa värden i din YAML-pipelinefil eller någon annanstans på git-lagringsplatsen. Om du i stället vill öka säkerheten och göra pipelinedefinitionerna återanvändbara använder du variabler.
Skapa en variabel
Azure Pipelines-webbgränssnittet har en redigerare som du kan använda för att skapa variabler för din pipeline:
Du kan ange ett Azure Pipelines-variabelvärde som hemlighet. När du anger ett variabelvärde som hemlighet kan du inte visa värdet när du har angett det. Azure Pipelines är utformat för att inte avslöja hemliga värden i pipelineloggarna.
Varning
Som standard fördunklar Azure Pipelines hemliga variabelvärden i pipelineloggar, men du måste också följa god praxis. Dina pipelinesteg har åtkomst till alla variabelvärden, inklusive hemligheter. Om din pipeline innehåller ett steg som inte hanterar en säker variabel på ett säkert sätt finns det en risk att den hemliga variabeln visas i pipelineloggarna.
Du kan låta användare åsidosätta ett variabelvärde när de kör pipelinen manuellt. Värdet som en användare tillhandahåller används endast för den specifika pipelinekörningen. Variabel åsidosättningar kan vara användbara när du testar din pipeline.
Använda en variabel i din pipeline
När du har skapat en variabel använder du en specifik syntax för att referera till variabeln i din pipelines YAML-fil:
- task: AzureResourceManagerTemplateDeployment@3
inputs:
connectedServiceName: $(ServiceConnectionName)
location: $(DeploymentDefaultLocation)
resourceGroupName: $(ResourceGroupName)
csmFile: deploy/main.bicep
overrideParameters: >
-environmentType $(EnvironmentType)
Filformatet för pipelinedefinitionen innehåller en särskild $(VariableName)
syntax. Du kan referera till valfri variabel med hjälp av den här metoden, oavsett om det är hemligt eller inte.
Dricks
Observera i föregående exempel att Bicep-filens namn inte lagras i en variabel. Precis som Bicep-parametrar behöver du inte skapa variabler för allt. Det är en bra idé att skapa variabler för allt som kan förändras mellan miljöer och för allt som är hemligt. Eftersom pipelinen alltid använder samma mallfil behöver du inte skapa en variabel för sökvägen.
Systemvariabler
Azure Pipelines använder också systemvariabler. Systemvariabler innehåller fördefinierad information som du kanske vill använda i din pipeline. Här är några av de systemvariabler som du kan använda i pipelinen:
Build.BuildNumber
är den unika identifieraren för pipelinekörningen. Trots namnetBuild.BuildNumber
är värdet ofta en sträng och inte ett tal. Du kan använda den här variabeln för att namnge din Azure-distribution, så att du kan spåra distributionen tillbaka till den specifika pipelinekörning som utlöste den.Agent.BuildDirectory
är sökvägen i agentdatorns filsystem där pipelinekörningens filer lagras. Den här informationen kan vara användbar när du vill referera till filer i byggagenten.
Skapa variabler i din pipelines YAML-fil
Förutom att använda Azure Pipelines-webbgränssnittet för att skapa variabler kan du ange variabelvärden i din pipelines YAML-fil. Du kan använda det här alternativet när du har värden som inte är hemliga, när värdena kan lagras på lagringsplatsen och när du vill behålla variabelvärden på en plats i filen, så att du kan referera till dem i hela pipelinedefinitionen. Du kan använda den här metoden för att spåra ändringar i variabeln i versionskontrollsystemet.
Om du vill ange en variabel i YAML-filen lägger du till ett variables
avsnitt:
trigger: none
pool:
vmImage: ubuntu-latest
variables:
ServiceConnectionName: 'MyServiceConnection'
EnvironmentType: 'Test'
ResourceGroupName: 'MyResourceGroup'
DeploymentDefaultLocation: 'westus3'
jobs:
- job:
steps:
- task: AzureResourceManagerTemplateDeployment@3
inputs:
connectedServiceName: $(ServiceConnectionName)
location: $(DeploymentDefaultLocation)
resourceGroupName: $(ResourceGroupName)
csmFile: deploy/main.bicep
overrideParameters: >
-environmentType $(EnvironmentType)
Det här pipelineexemplet definierar fyra variabler: ServiceConnectionName
, EnvironmentType
, ResourceGroupName
och DeploymentDefaultLocation
.
Senare i den här modulen får du se hur du kan blanda variabler som definierats på olika platser tillsammans i en pipeline.