Sdílet prostřednictvím


Nasazení na virtuální počítače s Linuxem v prostředí

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

Virtuální počítače můžete přidat jako prostředky v prostředích Azure Pipelines a cílit je na nasazení. V případě pracovního postupu kontinuální integrace a průběžného nasazování (CI/CD) umožňuje historie nasazení prostředí sledovat jednotlivé virtuální počítače zpět ke spouštěcímu potvrzení.

V tomto článku se dozvíte, jak nastavit pipeline Azure DevOps pro nasazení do několika prostředků virtuálního počítače (VM) s Linuxem v prostředí. Tyto pokyny sestavují a nasazují javascriptovou nebo java aplikaci, ale můžete je přizpůsobit pro libovolnou aplikaci, která publikuje balíček pro nasazení webu.

Další informace o prostředích a prostředcích cílených úlohou nasazení najdete v definici schématu YAML jobs.deployment.environment . Další informace o úlohách nasazení najdete v definici jobs.deployment .

Požadavky

Také pro javascriptové nebo Node.js aplikace:

Důležité

  • Aby bylo možné nasazovat aplikace, musí mít prostředky virtuálních počítačů cílového prostředí nainstalovaný a nakonfigurovaný veškerý potřebný software, závislosti, oprávnění a přihlášení.
  • Pokud chcete použít zdrojový kód GitHubu, potřebujete připojení ke službě GitHub. GitHub vás také může vyzvat k přihlášení, instalaci aplikace Azure Pipelines GitHub nebo autorizaci Azure Pipelines. Jednotlivé procesy dokončíte podle pokynů na obrazovce. Další informace najdete v tématu Přístup k úložištím GitHub.

Vytvoření prostředí a přidání virtuálních počítačů s Linuxem

V projektu Azure Pipelines vytvořte prostředí a přidejte virtuální počítače s Linuxem jako prostředky prostředí podle pokynů v tématu Vytvoření prostředí a přidejte virtuální počítač.

Spuštěním zkopírovaného registračního skriptu agenta na každém virtuálním počítači ho zaregistrujte v prostředí. Značky můžete také přiřadit jednotlivým virtuálním počítačům tak, že odpovíte na interaktivní výzvy.

Vytvoření a spuštění kanálu buildu

Vytvořte kanál CI, který sestaví a nasadí vaši aplikaci pokaždé, když dojde k potvrzení větve main úložiště kódu.

Vytvoření kanálu YAML

  1. V projektu Azure DevOps vyberte Kanály>Nový neboVytvořit kanál a pak jako umístění zdrojového kódu vyberte GitHub .
  2. Na obrazovce Vybrat úložiště vyberte vaše rozvětvované ukázkové úložiště.
  3. Na obrazovce Konfigurace kanálu vyberte Počáteční kanál.
  4. Na obrazovce Zkontrolujte YAML vaší pipeline nahraďte vygenerovaný počáteční kód následujícím kódem v závislosti na vašem modulu runtime.

Přidání úlohy sestavení

Úloha Build spouští úkoly pro sestavení a testování vašeho projektu a nahraje výstup ze sestavení na drop umístění. Tato úloha běží na agentech sestavení zadaných v kanálu pool, ne na virtuálních počítačích s Linuxem.

Následující potrubí sestaví a otestuje váš projekt Node.js pomocí npm, poté zabalí výstup a nahraje ho do úložného místa.

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

Další informace najdete v krocích pro vytvoření sestavení v sestavení aplikace Node.js pomocí nástroje gulp.

Spustit potrubí

Pokud chcete soubor azure-pipelines.yml uložit do úložiště a spustit kanál CI/CD, vyberte Uložit a spusťte a pak vyberte Uložit a spustit znovu.

Po dokončení kanálu zobrazte stránku Souhrn úlohy a ověřte, že úloha sestavení proběhla úspěšně a že se v části Související zobrazí 1 publikovaný artefakt.

Přidejte a spusťte úlohu nasazení

Úloha nasazení spustí preDeploy, deploy, routeTraffic, a postRouteTraffic háky životního cyklu jednou a potom spustí buď on: success nebo on: failure. Pokud nasadíte do virtálních strojů prostředí, fáze preDeploy se spustí na sestavovacím agentu, nikoliv na virtuálních strojích prostředí. Všechny ostatní kroky se spouštějí na registrovaných virtuálních počítačích v prostředí.

  1. Volitelný krok preDeploy se spustí před nasazením. Tento krok můžete použít pro orchestraci, přípravu virtuálních počítačů, přípravu artefaktů a zdravotní kontroly.
  2. Tento deploy krok nasadí objekt nasazení do virtuálních počítačů cílového prostředí.
  3. Volitelný routeTraffic krok může použít přepínání provozu.
  4. Volitelný postRouteTraffic krok může provádět kontroly stavu a oznámení.
  5. Vlastní on.failure a on.success kroky můžou poskytovat oznámení nebo obnovení.

Úloha nasazení do prostředí s resourceType: VirtualMachine vyžaduje, aby virtuální počítače tohoto prostředí mohly spouštět všechny úlohy kanálu CI/CD, jako je Bash nebo Azure CLI. Tento krok můžete použít k instalaci potřebného preDeploy softwaru a oprávnění na cílové virtuální počítače.

Pokud například krok nasazení používá Azure CLI, musí mít virtuální počítače agenta nainstalované a dostupné v cestě PATH pro uživatele agenta. Uživatel agenta musí mít oprávnění ke spuštění rozhraní příkazového řádku a musí se ověřit v Azure. Možná budete muset přidat uživatele agenta do sudoers nebo nastavit proměnné prostředí pro automatizaci instalace.

K instalaci Azure CLI na cílové virtuální počítače můžete použít preDeploy skript. Pokud se chcete ověřit v Azure, můžete spustit az login, nebo pro automatizaci definovat objekt zabezpečení a spustit az login --service-principal v kroku preDeploy.

Přidejte úlohu nasazení

Následující příklad úlohy nasazení se spustí po Build úspěšném dokončení úlohy. Přidání úlohy do pipeline:

  1. Vyberte ikonu Další akce v pravém horním rohu na stránce Souhrn , vyberte Upravit kanál a na konec kanálu přidejte následující kód. Nahraďte <environment-name> názvem prostředí, které jste vytvořili.

    Volitelně můžete vybrat konkrétní virtuální počítače z prostředí k obdržení nasazení pomocí parametru tags a specifikace <VMtag>, kterou jste definovali pro virtuální počítač.

    - deployment: VMDeploy
      displayName: Web deploy
      dependsOn: Build
      condition: succeeded()
      environment:
        name: <environment-name>
        resourceType: VirtualMachine
        tags: <VMtag> # VMs to deploy to
    
  2. Přidejte strategy k úloze deployment. Strategie nasazení runOnce je nejjednodušší a spustí se ve výchozím nastavení, pokud nezadáte strategy. Tato strategie provede kroky nasazení jednou na každém virtuálním počítači v prostředí bez paralelismu nebo správy provozu.

      strategy:
         runOnce:
           deploy:
              steps:
              - script: echo my first deployment
    
  3. Po přidání úlohy nasazení vyberte Ověřit a uložit, pak vyberte Uložit, vyberte Spustit a vyberte Spustit znovu. Při každém spuštění této úlohy se zaznamenává historie nasazení ve vztahu k prostředí.

    Poznámka:

    Při prvním spuštění kanálu, který používá prostředí, musíte udělit oprávnění pro všechna spuštění kanálu pro přístup k fondu agentů a prostředí. Vyberte symbol Čekání vedle úlohy na obrazovce Souhrn spuštění kanálu a pak vyberte Povolit udělit potřebná oprávnění.

Strategie postupného nasazení

Můžete použít rolling místo runOnce strategie nasazení . Strategie postupného nasazení může orchestrovat paralelismus, kontroly stavu a směrování provozu. Zatímco se runOnce strategie provádí na jednom virtuálním počítači najednou, průběžné nasazení může běžet paralelně na kumulativních sadách až pěti cílových virtuálních počítačů v závislosti na maxParallel nastavení.

Parametr maxParallel nastaví počet nebo procento virtuálních počítačů, které musí zůstat dostupné, a zajistí, aby aplikace během nasazení zvládla požadavky a snížila celkový výpadek. Tento parametr také určuje podmínky úspěchu a selhání pro nasazení.

Další informace o strategii postupného nasazení najdete v definici schématu jobs.deployment.strategy.rolling .

Příklad úlohy nasazení

Nasazení do prostředků virtuálních počítačů vyžadují, aby virtuální počítače měly nainstalované a nakonfigurované všechny požadované aplikace, závislosti a oprávnění. Tyto požadavky musíte předem nainstalovat ručně, nebo je musí nainstalovat nebo implementovat pipeline.

Nasazení Java aplikace do prostředků virtuálních počítačů je jednodušší implementovat, protože je nezávislé. Virtuální počítač Java (JVM) je často předinstalovaný na agentech virtuálních počítačů a nemusíte se starat o závislosti aplikací, oprávnění nebo správu balíčků. Stačí stáhnout soubor JAR a pak ho spustit s java -jar.

Aplikace Node.js vyžaduje, aby na každém virtuálním počítači agenta byla přítomna a nakonfigurovaná služba Node, případně závislosti npm a správce služeb, jako je systemd. Aby mohl být skript pro nasazení kanálu automatizován, musí být neinteraktivní a schopný restartu a správy služby aplikace.

Následující úloha nasazení YAML rolling pro JavaScriptovou aplikaci závisí na úspěšném dokončení etapy Build. Úloha nasazení předpokládá, že na každém virtuálním počítači agenta jsou už předinstalované nebo předkonfigurované následující požadavky. Pro úplnou automatizaci můžete tyto aplikace a služby nainstalovat a nakonfigurovat na virtuálních počítačích jako součást zpracování.

  • Node.js ve verzi 16.x je nainstalován a npm je dostupný v PATH agenta sestavení.
  • Systemd se systémovým servisním souborem nakonfigurovaným pro službu, která spouští Node.js aplikaci, například /etc/systemd/system/pipelines-javascript.service.
  • Sudo bez hesla pro uživatele agenta pro nezbytné příkazy, nastavené s parametrem NOPASSWD:/etc/sudoers.
  • Oprávnění k zápisu pro uživatele agenta do /opt/pipelines-javascript nebo jiného cíle nasazení

Návod

U většiny aplikací Node.js zvažte nasazení do služby Azure App Service nebo použití běžných pipeline úloh s agenty hostovanými společností Microsoft místo deployment úloh. Tento přístup je jednodušší a zabraňuje provozní režii při správě prostředí virtuálních počítačů. Nasazení do konkrétních prostředků virtuálních počítačů je nejvhodnější pro scénáře vyžadující přímou kontrolu nad servery virtuálních počítačů, pokročilou orchestrací nebo starší infrastrukturou.

- 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)"

Sledovatelnost kanálu přístupu v prostředí

Karta Nasazení pro dané prostředí poskytuje úplnou sledovatelnost potvrzení a pracovních položek i historii nasazení napříč kanály pro dané prostředí.

Snímek obrazovky se zobrazením nasazení