Förstå Azure Pipelines

Slutförd

Du kan automatisera stegen i distributionsprocessen med hjälp av en pipeline. Varje gång du gör en ändring i koden och genomför ändringen till git-lagringsplatsen kör pipelinen din fördefinierade process. En pipeline kan kontrollera att din Bicep-kod uppfyller dina kvalitetsstandarder och sedan automatiserar stegen för att distribuera dina resurser till Azure. Processen definieras i en pipelinedefinition som du skapar.

Azure Pipelines är en funktion i Azure DevOps-tjänsten. Azure DevOps innehåller även Azure Repos, som är värd för de Git-lagringsplatser som du använder för att lagra och dela din kod med dina medarbetare. När du lagrar din Bicep-kod i Git kan Azure Pipelines komma åt din kod för att automatisera distributionsprocesserna. I den här lektionen får du lära dig mer om Azure Pipelines.

Vad är en pipeline?

En pipeline är den repeterbara process som du använder för att testa och distribuera koden som definierats i en konfigurationsfil. En pipeline innehåller alla steg som du vill köra och i vilken ordning.

När du arbetar med Azure Pipelines definierar du din pipeline i en YAML-fil. En YAML-fil är en strukturerad textfil som liknar hur Bicep är en strukturerad textfil. Du kan skapa och redigera YAML-filer med valfri textredigerare. I den här modulen använder du Visual Studio Code. Visual Studio Code erbjuder ett tillägg som kan göra det enklare att redigera Azure DevOps YAML-pipelinefiler. Azure DevOps-webbgränssnittet innehåller också några verktyg som du kan använda för att visa och redigera YAML-pipelinefiler.

Kommentar

Azure Pipelines innehåller klassiska pipelines, en tidigare version av pipelinefunktionen. YAML-baserade pipelines har ersatt klassiska pipelines. I den här modulen diskuterar vi endast YAML-pipelines. Vi rekommenderar att du använder YAML-pipelines.

Eftersom en YAML-pipelinefil är en kodfil lagras filen med din Bicep-kod på Git-lagringsplatsen. Du använder Git-funktioner för att samarbeta kring din pipelinedefinition. Du kan hantera olika versioner av pipelinefilen med hjälp av incheckningar och grenar. I en framtida modul får du också lära dig mer om andra avancerade funktioner i pipelines, till exempel mallar. Mallar gör pipelinedefinitioner enkla att återanvända.

Agenter och pooler

Hittills har du distribuerat dina Bicep-filer från den lokala datorn. När du har skrivit en Bicep-mall distribuerar du den till Azure med hjälp av Azure CLI eller Azure PowerShell. De här verktygen använder datorns resurser för att skicka mallen till Azure. De använder din personliga identitet för att autentisera dig till Azure och för att kontrollera att du har behörighet att distribuera resurserna.

En pipeline behöver också åtkomst till en dator, så att den kan köra distributionsstegen. Azure Pipelines använder en dator som kallas agent. En agent är en dator som är konfigurerad för att köra distributionssteg för en pipeline. Varje agent har redan Bicep- och Azure-verktygen som du använde i tidigare moduler, så att de kan göra samma saker som du gör från din egen dator. I stället för ett mänskligt körningskommando instruerar Azure Pipelines-tjänsten agenten att köra de steg som du har definierat i en YAML-fil.

Azure Pipelines tillhandahåller flera typer av agenter för olika operativsystem, till exempel Ubuntu eller Windows, och olika uppsättningar med verktyg. Microsoft kör dessa agenter, så du behöver inte underhålla någon beräkningsinfrastruktur för agenterna. Agenterna kallas ibland Microsoft-värdbaserade agenter eller värdbaserade agenter eftersom de finns för din räkning. När pipelinen körs skapas en värdbaserad agent automatiskt. När pipelinen är klar tas den värdbaserade agenten bort automatiskt. Du kan inte komma åt värdbaserade agenter direkt, så det är viktigt att din pipeline innehåller alla steg som krävs för att distribuera din lösning.

En agentpool innehåller flera agenter av samma typ. När du skapar din pipeline anger du för Azure Pipelines vilken agentpool som ska användas för att köra varje uppsättning steg. När pipelinen körs väntar den på att en agent från poolen ska bli tillgänglig och instruerar sedan agenten att köra distributionsstegen. Alla agenter i poolen kan tilldelas för att köra din pipeline.

Diagram som visar en pipeline som körs på en agent i en agentpool.

Kommentar

Du har möjlighet att skapa en anpassad agent som kallas för en lokalt installerad agent. Du kan skapa en lokalt installerad agent om du har specifik programvara som du behöver köra som en del av din pipeline eller om du behöver kontrollera exakt hur agenten är konfigurerad. Vi diskuterar inte lokalt installerade agenter i den här modulen, men vi tillhandahåller en länk till mer information i sammanfattningen.

Utlösare

Om du vill instruera Azure Pipelines när du ska köra din pipeline skapar du en utlösare. Du kan välja mellan flera typer av utlösare. För tillfället använder du en manuell utlösare. Du talar manuellt om för Azure Pipelines när du ska börja köra pipelinen. Senare i den här modulen får du lära dig mer om andra typer av utlösare.

Diagram som visar en utlösare som initierar en pipeline.

Steg

Ett steg representerar en enda åtgärd som pipelinen utför. Ett steg liknar ett enskilt kommando som du kör i Bash eller PowerShell. För de flesta distributioner kör du flera steg i en sekvens. Du definierar sekvensen och all information om varje steg i YAML-pipelinefilen.

Azure Pipelines erbjuder två typer av steg:

  • Skript. Använd ett skriptsteg för att köra ett enda kommando eller en sekvens med kommandon i Bash, PowerShell eller Windows-kommandogränssnittet.
  • Aktiviteter. En uppgift är ett bekvämt sätt att komma åt många olika funktioner utan att skriva skriptinstruktioner. En inbyggd uppgift kan till exempel köra Azure CLI- och Azure PowerShell-cmdletar för att testa din kod eller ladda upp filer till en FTP-server. Vem som helst kan skriva en uppgift och dela den med andra användare genom att publicera uppgiften på Visual Studio Marketplace. Det finns en stor uppsättning kommersiella uppgifter och uppgifter med öppen källkod.

Vissa föredrar att använda skriptinstruktioner i stället för inbyggda uppgifter eftersom de ger mer kontroll över vad som körs. Andra föredrar att använda uppgifter så att de inte behöver skriva och hantera skript. I den här modulen använder vi en blandning av båda metoderna.

Projekt

I Azure Pipelines representerar ett jobb en ordnad uppsättning steg. Du har alltid minst ett jobb i en pipeline, och när du skapar komplexa distributioner är det vanligt att ha fler än ett jobb.

Kommentar

Du kan ange att varje jobb ska köras på en annan agentpool. Att köra jobb i olika agentpooler är användbart när du skapar och distribuerar lösningar som behöver använda olika operativsystem i olika delar av jobbpipelinen.

Anta till exempel att du skapar en iOS-app och appens serverdelstjänst. Du kan ha ett jobb som körs på en macOS-agentpool för att skapa iOS-appen och ett annat jobb som körs på en Ubuntu- eller Windows-agentpool för att skapa serverdelen. Du kan till och med säga till pipelinen att köra de två jobben samtidigt, vilket påskyndar pipelinens körning.

I den här modulen deklarerar vi agentpoolen i roten för pipelinedefinitionsfilerna, så att alla jobb i pipelines använder samma agentpool.

Diagram som visar en pipeline med två steg, båda inom ett jobb.

Kommentar

Du kan också använda faser i Azure Pipelines för att dela upp din pipeline i logiska faser och lägga till manuella kontroller vid olika tidpunkter i pipelinens körning. Du lär dig mer om faser i framtida moduler.

Exempel på grundläggande pipeline

Nu när du känner till de grundläggande begreppen i Azure Pipelines ska vi titta på en enkel pipelinedefinition i YAML:

trigger: none

pool:
  vmImage: ubuntu-latest

jobs:
- job:
  steps:
  - script: echo Hello, world!
    displayName: 'Run a one-line script'
  
  - script: |
      echo We'll add more steps soon.
      echo For example, we'll add our Bicep deployment step.
    displayName: 'Run a multi-line script'

Nu ska vi titta närmare på varje del av filen:

  • trigger anger när pipelinen ska köras. I det här fallet trigger: none anger du för Azure Pipelines att du vill utlösa pipelinen manuellt.
  • pool instruerar den pipeline som agentpoolen ska använda när den kör pipelinestegen. I det här exemplet körs pipelinen på en agent som kör Ubuntu-operativsystemet, som kommer från poolen med Microsoft-värdbaserade agenter.
  • jobs grupperar alla jobb i pipelinen.
  • job meddelar din pipeline att du har ett enda jobb.

    Dricks

    När du bara har ett jobb i pipelinen kan du utelämna nyckelorden jobs och job . Vi inkluderade job här för att klargöra hur begreppen fungerar tillsammans i en pipeline.

  • steps visar en lista över de åtgärder som ska köras i jobbet. Yaml-exemplet innehåller två steg. Båda stegen kör ett enkelt skript för att upprepa text. Varje steg har ett displayName värde som är ett läsbart namn för steget. Du ser visningsnamnet när du tittar på pipelineloggarna. Om du vill skapa ett flerradsskriptsteg använder du pipe-tecknet (|) som du ser i exemplet. När steget har körts visas utdata i pipelineloggen.

Viktigt!

I YAML-filer är indrag viktigt. Ta en titt på yaml-exemplet. Vissa rader i YAML är indragna med två eller fyra blanksteg. Antalet blanksteg som du använder är viktigt. Om du inte drar in filen korrekt kan Azure Pipelines inte tolka den. Visual Studio Code hjälper dig att hitta och åtgärda fel i YAML-filindraget.