Distribuera till Linux-VMs i en miljö

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022 | Azure DevOps Server 2020

Du kan lägga till virtuella datorer som resurser i Azure Pipelines-miljöer och rikta dem mot distributioner. För ett arbetsflöde för kontinuerlig integrering och kontinuerlig distribution (CI/CD) ger miljöns distributionshistorik spårbarhet för varje virtuell dator tillbaka till den utlösande incheckningen.

Den här artikeln visar hur du konfigurerar en Azure DevOps-pipeline för distributioner till flera virtuella Linux-datorresurser (VM) i en miljö. De här anvisningarna skapar och distribuerar antingen en JavaScript- eller Java-app, men du kan anpassa dem för alla appar som publicerar ett webbdistributionspaket.

Mer information om miljöer och resurser som mål för ett distributionsjobb finns i schemadefinitionen jobs.deployment.environment YAML. Mer information om distributionsjobb finns i definition för jobs.deployment .

Förutsättningar

För JavaScript- eller Node.js-appar:

Viktigt!

  • Om du vill distribuera appar måste virtuella målmiljöresurser för virtuella datorer ha all nödvändig programvara, beroenden, behörigheter och inloggningar installerade och konfigurerade.
  • Om du vill använda GitHub-källkod behöver du en GitHub-tjänstanslutning. GitHub kan också uppmana dig att logga in, installera Azure Pipelines GitHub-appen eller auktorisera Azure Pipelines. Följ anvisningarna på skärmen för att slutföra varje process. Mer information finns i Åtkomst till GitHub-lagringsplatser.

Skapa en miljö och lägg till virtuella Linux-datorer

I ditt Azure Pipelines-projekt skapar du en miljö och lägger till dina virtuella Linux-datorer som miljöresurser genom att följa anvisningarna i Skapa en miljö och lägga till en virtuell dator.

Kör det kopierade agentregistreringsskriptet på varje virtuell dator för att registrera det i miljön. Du kan också tilldela taggar till de enskilda virtuella datorerna genom att svara på de interaktiva prompterna.

Skapa och starta byggrörledningen

Skapa en CI-pipeline som skapar och distribuerar din app när det finns en incheckning till grenen main av din kodlagringsplats.

Skapa YAML-pipelinen

  1. I ditt Azure DevOps-projekt väljer du Pipelines>Ny pipeline eller Skapa pipeline och sedan GitHub som plats för källkoden.
  2. På skärmen Välj en lagringsplats väljer du din förgrenade exempellagringsplats.
  3. På skärmen Konfigurera pipeline väljer du Startpipeline.
  4. På skärmen Granska din YAML-pipeline ersätter du den genererade startkoden med följande kod, beroende på din körtid.

Lägg till byggjobbet

Jobbet Build kör uppgifter för att skapa och testa projektet och laddar upp byggutdata till en drop plats. Det här jobbet körs på de byggagenter som anges i pipelinen pool, inte på dina virtuella Linux-miljödatorer.

Följande pipeline bygger och testar ditt Node.js projekt med npm, paketera sedan utdata och laddar upp det till en släppplats.

trigger:
- main

pool:
  vmImage: ubuntu-latest

jobs:  
- job: Build
  displayName: Build
  steps:
  - task: UseNode@1
    inputs:
      version: '16.x'
    displayName: 'Install Node.js'
  - script: |
      npm install
      npm run build --if-present
      npm run test --if-present
    displayName: 'npm install, build and test'
  - task: ArchiveFiles@2
    displayName: 'Archive files'
    inputs:
      rootFolderOrFile: '$(System.DefaultWorkingDirectory)'
      includeRootFolder: false
      archiveType: tar
      tarCompression: gz
      archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).gz
      replaceExistingArchive: true
  - upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).gz
    artifact: drop

För mer information, granska stegen för att bygga en kompilering av Skapa din Node.js-app med gulp.

Kör pipelinen

Om du vill spara azure-pipelines.yml filen på lagringsplatsen och starta CI/CD-pipelinen väljer du Spara och kör och väljer sedan Spara och kör igen.

När pipelinen är klar, visa jobbets sammanfattningssida för att kontrollera att byggjobbet har körts framgångsrikt och att 1 publicerad artefakt visas under Relaterade.

Lägga till och köra distributionsjobbet

Ett distributionsjobb kör preDeploy, deploy, routeTraffic och postRouteTraffic livscykelhakar en gång och kör sedan antingen on: success eller on: failure. Om du distribuerar till miljö-VM, så körs preDeploy-fasen på byggagenten, inte på miljö-VM. Alla andra steg körs på registrerade virtuella datorer i miljön.

  1. Det valfria preDeploy steget körs före utplaceringen. Du kan använda det här steget för orkestrering, förberedelse av virtuella datorer och artefakter samt hälsokontroller.
  2. Steget deploy distribuerar distributionsobjektet till de virtuella målmiljöns virtuella datorer.
  3. Det valfria routeTraffic steget kan använda trafikväxling.
  4. Det valfria postRouteTraffic steget kan utföra hälsokontroller och meddelanden.
  5. De anpassade on.failure stegen och on.success kan ge meddelanden eller återställning.

Ett distributionsjobb till en miljö med resourceType: VirtualMachine kräver att de virtuella miljödatorerna kan köra alla pipelineuppgifter, till exempel Bash eller Azure CLI. Du kan använda steget preDeploy för att installera nödvändig programvara och behörigheter på virtuella måldatorer.

Om ett distributionssteg till exempel använder Azure CLI måste de virtuella agentdatorerna ha Azure CLI installerat och tillgängligt på PATH för agentanvändaren. Agentanvändaren måste ha behörighet att köra CLI och måste autentisera till Azure. Du kan behöva lägga till agentanvändaren i sudoers eller konfigurera miljövariabler för att automatisera installationen.

Du kan använda ett preDeploy skript för att installera Azure CLI på de virtuella måldatorerna. Om du vill autentisera till Azure kan du köra az login, eller för automatisering, definiera ett huvudnamn för tjänsten och köra az login --service-principal i ett preDeploy steg.

Lägg till distributionsjobbet

Följande exempeldistributionsjobb startar när Build jobbet har slutförts. Så här lägger du till jobbet i pipelinen:

  1. Välj ikonen Fler åtgärder uppe till höger på sidan Sammanfattning , välj Redigera pipeline och lägg till följande kod i slutet av pipelinen. Ersätt <environment-name> med namnet på den miljö som du skapade.

    Du kan också välja specifika virtuella datorer från miljön för att ta emot distributionen med hjälp av parametern tags och ange den <VMtag> du har definierat för den virtuella datorn.

    - deployment: VMDeploy
      displayName: Web deploy
      dependsOn: Build
      condition: succeeded()
      environment:
        name: <environment-name>
        resourceType: VirtualMachine
        tags: <VMtag> # VMs to deploy to
    
  2. Lägg till en strategy i deployment jobbet. RunOnce-distributionsstrategin är den enklaste och körs som standard om du inte anger strategy. Den här strategin utför distributionsstegen en gång på varje virtuell dator i miljön, utan parallellitet eller trafikhantering.

      strategy:
         runOnce:
           deploy:
              steps:
              - script: echo my first deployment
    
  3. När du har lagt till distributionsjobbet väljer du Verifiera och sparar. Välj sedan Spara, kör och sedan Kör igen. Med varje körning av det här jobbet registreras distributionshistorik mot miljön.

    Kommentar

    Första gången du kör pipelinen som använder miljön måste du bevilja behörighet för alla körningar av pipelinen för att få åtkomst till agentpoolen och miljön. Välj symbolen Väntar bredvid jobbet på pipelinekörningsskärmen Sammanfattning och välj sedan Tillåt för att bevilja nödvändiga behörigheter.

Strategi för rullande distribution

Du kan använda en rolling i stället för runOnce distributionsstrategi . En rullande distributionsstrategi kan samordna parallellitet, hälsokontroller och trafikroutning. runOnce Strategin körs på en enskild virtuell dator i taget, men en rullande distribution kan köras parallellt på rullande uppsättningar med upp till fem virtuella måldatorer, beroende på maxParallel inställningen.

Parametern maxParallel anger antalet eller procentandelen virtuella datorer som måste vara tillgängliga, vilket säkerställer att appen kan hantera begäranden och minska den totala stilleståndstiden under distributionerna. Den här parametern bestämmer även villkoren för lyckade och misslyckade distributioner.

Mer information om den löpande distributionsstrategin finns i schemadefinitionen jobs.deployment.strategy.rolling .

Exempel på distributionsjobb

Distributioner till VM-resurser kräver att de virtuella datorerna har alla nödvändiga appar, beroenden och behörigheter installerade och konfigurerade. Du måste förinstallera dessa krav manuellt, annars måste pipelinen installera eller implementera dem.

Java-appdistributionen till VM-resurser är enklare att implementera eftersom den är fristående. Den virtuella Java-datorn (JVM) är ofta förinstallerad på VM-agenter och du behöver inte bekymra dig om appberoenden, behörigheter eller pakethantering. Du kan bara ladda ned JAR-filen och sedan köra den med java -jar.

Den Node.js appen kräver att Node, eventuellt npm-beroenden, och en tjänsthanterare som systemd finns och konfigureras på varje virtuell agentdator. För att kunna automatiseras måste pipelinedistributionsskriptet vara icke-interaktivt och kunna starta om och hantera appens tjänst.

Följande distributionsjobb i YAML rolling för JavaScript-appen är beroende av att fasen Build har slutförts framgångsrikt. Distributionsjobbet förutsätter att följande krav redan är förinstallerade eller förkonfigurerade på varje virtuell agentdator. För fullständig automatisering kan du installera och konfigurera dessa appar och tjänster på de virtuella datorerna som en del av pipelinen.

  • Node.js 16.x installerat och npm tillgängligt på byggagentens PATH.
  • Systemd med en systembaserad tjänstfil som konfigurerats för tjänsten som startar Node.js-appen, till exempel /etc/systemd/system/pipelines-javascript.service.
  • Lösenordslös sudo för agentanvändaren för nödvändiga kommandon, som anges med NOPASSWD: i /etc/sudoers.
  • Skrivbehörigheter för agentanvändaren till /opt/pipelines-javascript eller annat distributionsmål.

Tips/Råd

För de flesta Node.js appar bör du överväga att distribuera till Azure App Service eller använda vanliga pipelinejobb med Microsoft-värdbaserade agenter i stället för att använda distributionsjobb. Den här metoden är enklare och undviker driftkostnaderna för att hantera vm-miljöer. Distribution till specifika VM-resurser passar bäst för scenarier som kräver direkt kontroll över de virtuella datorservrarna, avancerad orkestrering eller äldre infrastruktur.

- stage: Deploy
  displayName: Rolling Deploy to VMs
  dependsOn: Build
  condition: succeeded()
  jobs:
  - deployment: RollingDeploy
    displayName: Rolling deploy to Ubuntu VMs
    environment:
      name: <environment-name>
      resourceType: VirtualMachine
    strategy:
      rolling:
        maxParallel: 1   #or 2 for parallel. For percentages, use x%
        preDeploy:
          steps:
          - download: current
            artifact: drop
          - script: echo "Pre-deploy on $(hostname)"
        deploy:
          steps:
          - script: |
              echo "Unpacking Node.js app on $(hostname)"
              sudo mkdir -p /opt/pipelines-javascript
              sudo tar -xzf $(Pipeline.Workspace)/drop/$(Build.BuildId).tar.gz -C /opt/pipelines-javascript --strip-components=1
              cd /opt/pipelines-javascript
              echo "Installing production dependencies"
              sudo npm ci --only=production
              echo "Restarting Node.js service"
              sudo systemctl restart pipelines-javascript
            displayName: 'Extract, install, and restart Node.js service'
        routeTraffic:
          steps:
          - script: echo "Routing traffic on $(hostname)"
        postRouteTraffic:
          steps:
          - script: echo "Post-route health check on $(hostname)"
        on:
          failure:
            steps:
            - script: echo "Deployment failed on $(hostname)"
          success:
            steps:
            - script: echo "Deployment succeeded on $(hostname)"

Åtkomst till pipelinespårning i miljön

Fliken Miljödistributioner ger fullständig spårning av incheckningar och arbetsobjekt och en distributionshistorik för flera pipelines för miljön.

Skärmbild av distributionsvyn.