Sdílet prostřednictvím


Přizpůsobení kanálu

Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019

Toto je podrobný průvodce běžnými způsoby přizpůsobení kanálu.

Požadavek

Postupujte podle pokynů v části Vytvoření prvního kanálu a vytvořte pracovní kanál.

azure-pipelines.yml Vysvětlení souboru

Kanál se definuje pomocí souboru YAML v úložišti. Obvykle se tento soubor jmenuje azure-pipelines.yml a nachází se v kořenovém adresáři vašeho úložiště.

Přejděte na stránku Pipelines v Azure Pipelines , vyberte kanál, který jste vytvořili, a v místní nabídce kanálu zvolte Upravit a otevřete editor YAML kanálu.

Poznámka:

Pokyny k zobrazení a správě kanálů na portálu Azure DevOps najdete v tématu Zobrazení a správa kanálů.

Prozkoumejte obsah souboru YAML.

 trigger:
 - main

 pool:
   vmImage: 'ubuntu-latest'

 steps:
 - task: Maven@4
   inputs:
     mavenPomFile: 'pom.xml'
     mavenOptions: '-Xmx3072m'
     javaHomeOption: 'JDKVersion'
     jdkVersionOption: '1.11'
     jdkArchitectureOption: 'x64'
     publishJUnitResults: false
     testResultsFiles: '**/surefire-reports/TEST-*.xml'
     goals: 'package'

Poznámka:

Obsah souboru YAML se může lišit v závislosti na ukázkovém úložišti, se kterým jste začali, nebo upgrady provedené v Azure Pipelines.

Tento kanál se spustí vždy, když váš tým odešle změnu do hlavní větve úložiště nebo vytvoří žádost o přijetí změn. Běží na počítači s Linuxem hostovaným Microsoftem. Proces kanálu má jeden krok, kterým je spuštění úlohy Maven.

Změna platformy, na které se má stavět

Projekt můžete sestavit na agentech hostovaných Microsoftem, kteří už obsahují sady SDK a nástroje pro různé vývojové jazyky. Nebo můžete používat agenty v místním prostředí s konkrétními nástroji, které potřebujete.

  • Přejděte do editoru kanálu výběrem akce Upravit kanál v buildu nebo výběrem možnosti Upravit na hlavní stránce kanálu.

  • V současné době kanál běží na agentu Linuxu:

    pool:
      vmImage: "ubuntu-latest"
    
  • Pokud chcete zvolit jinou platformu, jako je Windows nebo Mac, změňte vmImage hodnotu:

    pool:
      vmImage: "windows-latest"
    
    pool:
      vmImage: "macos-latest"
    
  • Vyberte Uložit a potvrďte změny, abyste viděli spuštění kanálu na jiné platformě.

Přidání kroků

Do kanálu můžete přidat další skripty nebo úlohy . Úkol je předem zabalený skript. Úlohy můžete použít k vytváření, testování, publikování nebo nasazení aplikace. V Javě používá úloha Mavenu, kterou jsme použili k testování a publikování výsledků, ale můžete také použít úlohu k publikování výsledků pokrytí kódu.

  • Otevřete editor YAML pro váš kanál.

  • Na konec souboru YAML přidejte následující fragment kódu.

    - task: PublishCodeCoverageResults@1
      inputs:
        codeCoverageTool: "JaCoCo"
        summaryFileLocation: "$(System.DefaultWorkingDirectory)/**/site/jacoco/jacoco.xml"
        reportDirectory: "$(System.DefaultWorkingDirectory)/**/site/jacoco"
        failIfCoverageEmpty: true
    
  • Vyberte Uložit a potvrďte změny.

  • Výsledky pokrytí testů a kódu můžete zobrazit tak, že vyberete sestavení a přejdete na karty Test a Pokrytí .

Sestavování napříč několika platformami

Projekt můžete sestavit a otestovat na více platformách. Jedním ze způsobů, jak to udělat, je s strategy a matrix. Proměnné můžete použít k pohodlnému vložení dat do různých částí kanálu. V tomto příkladu použijeme proměnnou k předání názvu obrázku, který chceme použít.

  • V souboru nahraďte azure-pipelines.yml tento obsah:

    pool:
      vmImage: "ubuntu-latest"
    

    s následujícím obsahem:

    strategy:
      matrix:
        linux:
          imageName: "ubuntu-latest"
        mac:
          imageName: "macOS-latest"
        windows:
          imageName: "windows-latest"
      maxParallel: 3
    
    pool:
      vmImage: $(imageName)
    
  • Vyberte Uložit a potvrďte změny, abyste viděli, že sestavení běží až tři úlohy na třech různých platformách.

Každý agent může současně spustit pouze jednu úlohu. Pokud chcete paralelně spustit více úloh, musíte nakonfigurovat více agentů. Potřebujete také dostatek paralelních úloh.

Sestavení s použitím více verzí

Pokud chcete vytvořit projekt pomocí různých verzí tohoto jazyka, můžete použít matrix verze a proměnnou. V tomto kroku můžete buď vytvořit projekt Java se dvěma různými verzemi Javy na jedné platformě, nebo spustit různé verze Javy na různých platformách.

Poznámka:

V kontextu nelze použít strategy vícekrát.

  • Pokud chcete vytvořit na jedné platformě a více verzích, přidejte do azure-pipelines.yml souboru následující matici před úlohu Maven a za vmImage.

    strategy:
      matrix:
        jdk10:
          jdkVersion: "1.10"
        jdk11:
          jdkVersion: "1.11"
      maxParallel: 2
    
  • Potom tento řádek nahraďte v úkolu Maven:

    jdkVersionOption: "1.11"
    

    tímto řádkem:

    jdkVersionOption: $(jdkVersion)
    
  • Nezapomeňte proměnnou $(imageName) změnit zpět na platformu podle vašeho výběru.

  • Pokud chcete vytvořit více platforem a verzí, nahraďte celý obsah v azure-pipelines.yml souboru před úlohou publikování následujícím fragmentem kódu:

    trigger:
    - main
    
    strategy:
      matrix:
        jdk10_linux:
          imageName: "ubuntu-latest"
          jdkVersion: "1.10"
        jdk11_windows:
          imageName: "windows-latest"
          jdkVersion: "1.11"
      maxParallel: 2
    
    pool:
      vmImage: $(imageName)
    
    steps:
    - task: Maven@4
      inputs:
        mavenPomFile: "pom.xml"
        mavenOptions: "-Xmx3072m"
        javaHomeOption: "JDKVersion"
        jdkVersionOption: $(jdkVersion)
        jdkArchitectureOption: "x64"
        publishJUnitResults: true
        testResultsFiles: "**/TEST-*.xml"
        goals: "package"
    
  • Vyberte Uložit a potvrďte změny, abyste viděli, že sestavení spouští dvě úlohy na dvou různých platformách a sadách SDK.

Přizpůsobení triggerů CI

Triggery kanálu způsobují spuštění kanálu. Kanál můžete použít trigger: k tomu, aby se spustil při každém nasdílení aktualizace do větve. Kanály YAML jsou ve výchozím nastavení nakonfigurované s triggerem CI ve vaší výchozí větvi (což je obvykle main). Můžete nastavit triggery pro konkrétní větve nebo pro ověření žádosti o přijetí změn. V případě triggeru ověření žádosti o přijetí změn stačí krok nahradit trigger: následujícím pr: dvěma příklady. Ve výchozím nastavení se kanál spouští pro každou změnu žádosti o přijetí změn.

  • Pokud chcete nastavit triggery, přidejte na začátek azure-pipelines.yml souboru některý z následujících fragmentů kódu.

    trigger:
      - main
      - releases/*
    
    pr:
      - main
      - releases/*
    

    Můžete zadat úplný název větve (například main) nebo zástupný znak odpovídající předponě (například releases/*).

Nastavení kanálu

Nastavení kanálu můžete zobrazit a nakonfigurovat v nabídce Další akce na stránce podrobností kanálu.

Snímek obrazovky s nastavením kanálu a nabídkou dalších akcí

  • Správa zabezpečení – Správa zabezpečení -
  • Přejmenování nebo přesunutí – Upravte název kanálu a umístění složky. Snímek obrazovky se stránkou pro přejmenování nebo přesunutí kanálu
  • Odznáček Stav Přidat stavový odznáček - do úložiště
  • Odstranit – Odstraní kanál včetně všech sestavení a přidružených artefaktů.
  • Zobrazení naplánovaných spuštění -

Zvolte Nastavení a nakonfigurujte následující nastavení kanálu.

Snímek obrazovky se stránkou nastavení kanálu

V podokně Nastavení kanálu můžete nakonfigurovat následující nastavení.

  • Zpracování nových žádostí o spuštění – někdy budete chtít zabránit spuštění nových spuštění ve vašem kanálu.

    • Ve výchozím nastavení je zpracování nových žádostí o spuštění povoleno. Toto nastavení umožňuje standardní zpracování všech typů triggerů, včetně ručních spuštění.
    • Pozastavené kanály umožňují zpracování spuštěných požadavků, ale tyto požadavky se zařadí do fronty bez skutečného spuštění. Pokud je povolené nové zpracování požadavků, spuštění zpracování pokračuje od prvního požadavku ve frontě.
    • Zakázané kanály brání uživatelům ve spouštění nových spuštění. Při použití tohoto nastavení jsou také zakázány všechny triggery. U všech zásad sestavení používajících zakázaný kanál se vedle zásad sestavení v okně s přehledem žádosti o přijetí změn zobrazí zpráva Nejde za frontu sestavit a stav zásady sestavení se přeruší.
  • Cesta k souboru YAML – Pokud někdy potřebujete nasměrovat kanál tak, aby používal jiný soubor YAML, můžete zadat cestu k danému souboru. Toto nastavení může být užitečné také v případě, že potřebujete přesunout nebo přejmenovat soubor YAML.

  • Automaticky propojit pracovní položky zahrnuté v tomto spuštění – změny spojené s daným spuštěním kanálu můžou mít přidružené pracovní položky. Tuto možnost vyberte, pokud chcete tyto pracovní položky propojit se spuštěním. Pokud je vybrána možnost Automaticky propojit pracovní položky zahrnuté v tomto spuštění , musíte zadat konkrétní větev nebo * pro všechny větve, což je výchozí hodnota. Pokud zadáte větev, pracovní položky se přidružují jenom ke spuštěním této větve. Pokud zadáte, pracovní položky se přidružují *ke všem spuštěním.

    Snímek obrazovky s nastavením pro automatické propojení pracovních položek zahrnutých v tomto spuštění

Správa zabezpečení

Zabezpečení kanálů můžete nakonfigurovat na úrovni projektu z části Další akce na cílové stránce kanálů a na úrovni kanálu na stránce podrobností kanálu.

Snímek obrazovky s možnostmi nabídky zabezpečení kanálu

Pokud chcete podporovat zabezpečení operací kanálu, můžete přidat uživatele do předdefinované skupiny zabezpečení, nastavit jednotlivá oprávnění pro uživatele nebo skupinu nebo přidat uživatele k předdefinovaným rolím. Zabezpečení služby Azure Pipelines můžete spravovat na webovém portálu, a to buď z kontextu uživatele nebo správce. Další informace o konfiguraci zabezpečení kanálů najdete v tématu Oprávnění kanálu a role zabezpečení.

Vytvoření pracovní položky při selhání

Kanály YAML nemají pracovní položku Vytvořit pro nastavení selhání , jako jsou klasické kanály buildu. Klasické kanály buildu jsou jedna fáze a vytvoření pracovní položky při selhání se vztahuje na celý kanál. Kanály YAML můžou být vícefázové a nastavení na úrovni kanálu nemusí být vhodné. Pokud chcete implementovat vytvoření pracovní položky při selhání v kanálu YAML, můžete použít metody, jako jsou Pracovní položky – Vytvoření volání rozhraní REST API nebo azure DevOps CLI az boards work-item create příkaz v požadovaném bodě v kanálu.

Následující příklad obsahuje dvě úlohy. První úloha představuje práci kanálu, ale pokud selže, spustí se druhá úloha a vytvoří chybu ve stejném projektu jako kanál.

# When manually running the pipeline, you can select whether it
# succeeds or fails.
parameters:
- name: succeed
  displayName: Succeed or fail
  type: boolean
  default: false

trigger:
- main

pool:
  vmImage: ubuntu-latest

jobs:
- job: Work
  steps:
  - script: echo Hello, world!
    displayName: 'Run a one-line script'

  # This malformed command causes the job to fail
  # Only run this command if the succeed variable is set to false
  - script: git clone malformed input
    condition: eq(${{ parameters.succeed }}, false)

# This job creates a work item, and only runs if the previous job failed
- job: ErrorHandler
  dependsOn: Work
  condition: failed()
  steps: 
  - bash: |
      az boards work-item create \
        --title "Build $(build.buildNumber) failed" \
        --type bug \
        --org $(System.TeamFoundationCollectionUri) \
        --project $(System.TeamProject)
    env: 
      AZURE_DEVOPS_EXT_PAT: $(System.AccessToken)
    displayName: 'Create work item on failure'

Poznámka:

Azure Boards umožňuje nakonfigurovat sledování pracovních položek pomocí několika různých procesů, jako je agilní nebo základní. Každý proces má různé typy pracovních položek, a ne každý typ pracovní položky je v každém procesu dostupný. Seznam typů pracovních položek podporovaných jednotlivými procesy najdete v tématu Typy pracovních položek (WIT).

Předchozí příklad pomocí parametrů modulu runtime konfiguruje, jestli je kanál úspěšný nebo neúspěšný. Při ručním spuštění kanálu můžete nastavit hodnotu parametru succeed . Druhý script krok v první úloze kanálu vyhodnotí succeed parametr a spustí se pouze v době, kdy succeed je nastavená hodnota false.

Druhá úloha v kanálu má závislost na první úloze a spustí se pouze v případě, že první úloha selže. Druhá úloha pomocí azure DevOps CLI az boards work-item create příkaz k vytvoření chyby. Další informace o spouštění příkazů Rozhraní příkazového řádku Azure DevOps z kanálu najdete v tématu Spouštění příkazů v kanálu YAML.

Kanály YAML nemají pracovní položku Vytvořit pro nastavení selhání , jako jsou klasické kanály buildu. Klasické kanály buildu jsou jedna fáze a vytvoření pracovní položky při selhání se vztahuje na celý kanál. Kanály YAML můžou být vícefázové a nastavení na úrovni kanálu nemusí být vhodné. Pokud chcete implementovat vytvoření pracovní položky při selhání v kanálu YAML, můžete použít pracovní položky – vytvořit volání rozhraní REST API v požadovaném bodě v kanálu.

Následující příklad obsahuje dvě úlohy. První úloha představuje práci kanálu, ale pokud selže, spustí se druhá úloha a vytvoří chybu ve stejném projektu jako kanál.

# When manually running the pipeline, you can select whether it
# succeeds or fails.
parameters:
- name: succeed
  displayName: Succeed or fail
  type: boolean
  default: false

trigger:
- main

pool:
  vmImage: ubuntu-latest

jobs:
- job: Work
  steps:
  - script: echo Hello, world!
    displayName: 'Run a one-line script'

  # This malformed command causes the job to fail
  # Only run this command if the succeed variable is set to false
  - script: git clone malformed input
    condition: eq(${{ parameters.succeed }}, false)

# This job creates a work item, and only runs if the previous job failed
- job: ErrorHandler
  dependsOn: Work
  condition: failed()
  steps: 
  - bash: |
      curl \
        -X POST \
        -H 'Authorization: Basic $(System.AccessToken)' \
        -H 'Content-Type: application/json-patch+json' \
        -d '[
              {
                "op": "add",
                "path": "/fields/System.Title",
                "from": null,
                "value": "git clone failed"
              }
            ]' \
        "$(System.CollectionUri)$(System.TeamProject)/_apis//wit/workitems/$Bug?api-version=7.1-preview.3
"
    env:
        SYSTEM_ACCESSTOKEN: $(System.AccessToken)
    displayName: 'Create work item on failure'

Poznámka:

Azure Boards umožňuje nakonfigurovat sledování pracovních položek pomocí několika různých procesů, jako je agilní nebo základní. Každý proces má různé typy pracovních položek, a ne každý typ pracovní položky je v každém procesu dostupný. Seznam typů pracovních položek podporovaných jednotlivými procesy najdete v tématu Typy pracovních položek (WIT).

Předchozí příklad pomocí parametrů modulu runtime konfiguruje, jestli je kanál úspěšný nebo neúspěšný. Při ručním spuštění kanálu můžete nastavit hodnotu parametru succeed . Druhý script krok v první úloze kanálu vyhodnotí succeed parametr a spustí se pouze v době, kdy succeed je nastavená hodnota false.

Druhá úloha v kanálu má závislost na první úloze a spustí se pouze v případě, že první úloha selže. Druhá úloha používá k vytvoření chyby příkaz az boards work-item create rozhraní AZURE DevOps API.

Tento příklad používá dvě úlohy, ale stejný přístup je možné použít ve více fázích.

Poznámka:

Můžete také použít rozšíření marketplace, jako je vytvoření chyby při selhání vydané verze, která podporuje kanály YAML s více fázemi.

Další kroky

Naučili jste se základy přizpůsobení kanálu. V dalším kroku doporučujeme získat další informace o přizpůsobení kanálu pro jazyk, který používáte:

Nebo pokud chcete rozšířit kanál CI na kanál CI/CD, zahrňte úlohu nasazení s kroky pro nasazení aplikace do prostředí.

Další informace otématech

Další informace o tom, co dalšího můžete dělat v kanálech YAML, najdete v referenčních informacích ke schématu YAML.