Publikování a stahování artefaktů kanálu

Služby Azure DevOps

Pomocí Azure Pipelines můžete stáhnout artefakty z dřívějších fází kanálu nebo z jiného kanálu. Artefakt můžete také publikovat do sdílené složky nebo ho zpřístupnit jako artefakt kanálu.

Publikování artefaktů

Artefakty můžete publikovat pomocí YAML, klasického editoru nebo Azure CLI:

Poznámka:

Artefakty kanálu publikování se v kanálech verze nepodporují.

steps:
- publish: $(System.DefaultWorkingDirectory)/bin/WebApp
  artifact: WebApp

Poznámka:

Klíčové publish slovo je zástupce úlohy Publikovat kanál artefaktu .

I když je název artefaktu nepovinný, je vhodné zadat název, který přesně odpovídá obsahu artefaktu. Pokud plánujete využívat artefakt z úlohy spuštěné v jiném operačním systému, musíte zajistit, aby všechny cesty k souborům byly platné pro cílové prostředí. Například název souboru obsahujícího znak \ nebo * se nepovede stáhnout ve Windows.

Je vyžadována cesta k souboru nebo složce, kterou chcete publikovat. Může to být absolutní nebo relativní cesta k $(System.DefaultWorkingDirectory).

Balíčky v Azure Artifacts jsou neměnné. Po publikování balíčku bude jeho verze trvale vyhrazena. Opětovné spuštění neúspěšných úloh selže, pokud byl balíček publikován. Dobrým způsobem, jak k tomu přistupovat, pokud chcete být schopni znovu spustit neúspěšné úlohy bez již existujícího balíčku chyby, je použít podmínky ke spuštění pouze v případě, že předchozí úloha proběhla úspěšně.

  jobs:
  - job: Job1
    steps:
      - script: echo Hello Job1!

  - job: Job2
    steps:
      - script: echo Hello Job2!
    dependsOn: Job1

Poznámka:

Za ukládání artefaktů kanálu se vám nebudou účtovat poplatky. Kanál Ukládání do mezipaměti je také vyloučený z fakturace úložiště. Podívejte se , které artefakty se započítávají do celkového fakturovaného úložiště.

Upozornění

Odstraněním spuštění kanálu dojde k odstranění všech artefaktů přidružených k běhu.

Použití .artifactignore

.artifactignore používá podobnou syntaxi ( .gitignore s několika omezeními) k určení souborů, které se mají při publikování artefaktů ignorovat. Ujistěte se, že se soubor .artifactignore nachází v adresáři určeném argumentem targetPath úlohy Publish Pipeline Artifacts.

Poznámka:

Znak plus + není podporován v cestách URL a některá metadata sestavení pro typy balíčků, jako je Maven.

Příklad: ignorovat všechny soubory kromě souborů .exe :

**/*
!*.exe

Důležité

Azure Artifacts automaticky ignoruje cestu ke složce .git , pokud nemáte soubor .artifactignore . Můžete to obejít vytvořením prázdného souboru .artifactignore .

Stažení artefaktů

Artefakty si můžete stáhnout pomocí YAML, klasického editoru nebo Azure CLI.

steps:
- download: current
  artifact: WebApp
  • current: Stáhněte artefakty vytvořené aktuálním spuštěním kanálu. Možnosti: aktuální, specifické.

Poznámka:

Seznam publikovaných artefaktů bude k dispozici pouze v následujících závislých úlohách. Proto použijte current možnost pouze v samostatných úlohách, které jsou závislé na úlohách s úlohami publikování artefaktů.

Tip

Prostředky kanálu můžete použít k definování zdroje na jednom místě a jeho použití kdekoli ve vašem kanálu.

Poznámka:

Klíčové download slovo stáhne artefakty. Další informace najdete v tématu steps.download.

Pokud chcete stáhnout artefakt kanálu z jiného projektu v rámci vaší organizace, ujistěte se, že máte nakonfigurovaná odpovídající oprávnění pro podřízený projekt i podřízený kanál. Ve výchozím nastavení se soubory stáhnou do $(Pipeline.Workspace). Pokud nebyl zadán název artefaktu, vytvoří se podadresář pro každý stažený artefakt. K omezení souborů, které se stáhnou, můžete použít odpovídající vzory. Další podrobnosti najdete v tématu Vzory porovnávání souborů.

steps:
- download: current
  artifact: WebApp
  patterns: |
    **/*.js
    **/*.zip

Výběr artefaktů

Jeden krok stahování může stáhnout jeden nebo více artefaktů. Pokud chcete stáhnout více artefaktů, ponechte pole názvu artefaktu prázdné a pomocí vzorů porovnávání souborů omezte, které soubory se stáhnou. ** je výchozí vzor porovnávání souborů (všechny soubory ve všech artefaktech).

Jeden artefakt

Při zadání názvu artefaktu:

  1. Stáhnou se jenom soubory pro daný artefakt. Pokud artefakt neexistuje, úloha selže.

  2. Vzory porovnávání souborů se vyhodnocují vzhledem ke kořenovému adresáři artefaktu. Vzor například *.jar odpovídá všem souborům s příponou .jar v kořenovém adresáři artefaktu.

Následující příklad ukazuje, jak stáhnout vše *.js z artefaktu WebApp:

steps:
- download: current
  artifact: WebApp
  patterns: '**/*.js'

Více artefaktů

Pokud není zadán žádný název artefaktu:

  1. Více artefaktů je možné stáhnout a úloha se nezdaří, pokud nejsou nalezeny žádné soubory.

  2. Pro každý artefakt se vytvoří podadresář.

  3. Vzory porovnávání souborů by měly předpokládat, že první segment vzoru je (nebo odpovídá) názvu artefaktu. Například WebApp/** odpovídá všem souborům z artefaktu WebApp . Vzor */*.dll odpovídá všem souborům s příponou .dll v kořenovém adresáři každého artefaktu.

Následující příklad ukazuje, jak stáhnout všechny .zip soubory ze všech artefaktů:

steps:
- download: current
  patterns: '**/*.zip'

Artefakty v úlohách vydaných verzí a nasazení

Artefakty se stáhnou jenom automaticky v úlohách nasazení. Ve výchozím nastavení se artefakty stáhnou do $(Pipeline.Workspace). Úloha artefaktu stahování se automaticky vloží pouze při použití deploy háku životního cyklu v nasazení. Pokud chcete zastavit automatické stahování artefaktů, přidejte download krok a nastavte jeho hodnotu na žádné. V běžné úloze sestavení musíte explicitně použít download klíčové slovo kroku nebo úlohu Stažení artefaktu kanálu. Další informace o dalších typech háků najdete v hácích životního cyklu.

steps:
- download: none

Použití artefaktů napříč fázemi

Pokud chcete mít přístup k artefaktu v různých fázích kanálu, můžete teď artefakt publikovat v jedné fázi a potom ho v další fázi stáhnout s využitím závislostí. Další podrobnosti najdete v tématu věnovaném závislostem v jednotlivých fázích.

Příklad

V následujícím příkladu zkopírujeme a publikujeme složku skriptu z našeho úložiště do souboru $(Build.ArtifactStagingDirectory). Ve druhé fázi stáhneme a spustíme skript.

trigger:
- main
stages:
- stage: build
  jobs:
  - job: run_build
    pool:
      vmImage: 'windows-latest'
    steps:
    - task: VSBuild@1
      inputs:
        solution: '**/*.sln'
        msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactStagingDirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"'
        platform: 'Any CPU'
        configuration: 'Release'

    - task: CopyFiles@2
      displayName: 'Copy scripts'
      inputs:
        contents: 'scripts/**'
        targetFolder: '$(Build.ArtifactStagingDirectory)'

    - publish: '$(Build.ArtifactStagingDirectory)/scripts'
      displayName: 'Publish script'
      artifact: drop

- stage: test
  dependsOn: build
  jobs:
  - job: run_test
    pool:
      vmImage: 'windows-latest'
    steps:
    - download: current
      artifact: drop
    - task: PowerShell@2
      inputs:
        filePath: '$(Pipeline.Workspace)\drop\test.ps1'

Screenshot showing the PowerShell task output

Migrace z artefaktů sestavení

Artefakty kanálu představují novou generaci artefaktů sestavení a doporučuje se pracovat s artefakty. Artefakty publikované pomocí úlohy Publikovat artefakty sestavení je stále možné stáhnout pomocí funkce Stáhnout artefakty sestavení, ale doporučujeme místo toho použít nejnovější úlohu Stažení artefaktu kanálu.

Při migraci z artefaktů sestavení na artefakty kanálu:

  1. Ve výchozím nastavení úloha Download Pipeline Artifact stahuje soubory do $(Pipeline.Workspace). Toto je výchozí a doporučená cesta pro všechny typy artefaktů.

  2. Očekává se, že vzory porovnávání souborů pro úlohu Stáhnout artefakty sestavení začínají názvem artefaktu (nebo shodou) bez ohledu na to, jestli byl zadaný nebo ne konkrétní artefakt. V úloze Stažení artefaktu kanálu by vzory neměly obsahovat název artefaktu, pokud už byl zadán název artefaktu. Další informace najdete v tématu výběr jednoho artefaktu.

Příklad

- task: PublishPipelineArtifact@1
  displayName: 'Publish pipeline artifact'
  inputs:
    targetPath: '$(Pipeline.Workspace)'
    ${{ if eq(variables['Build.SourceBranchName'], 'main') }}:
        artifact: 'prod'
    ${{ else }}:
        artifact: 'dev'
    publishLocation: 'pipeline'
  • targetPath: (Povinné) Cesta k souboru nebo adresáři k publikování. Může být absolutní nebo relativní vzhledem k výchozímu pracovnímu adresáři. Může obsahovat proměnné, ale zástupné dokumentace se nepodporují. Výchozí hodnota: $(Pipeline.Workspace).

  • publishLocation: (Povinné) Umístění publikování artefaktů Zvolte, jestli se má artefakt uložit ve službě Azure Pipelines, nebo ho zkopírovat do sdílené složky, která musí být přístupná z agenta kanálu. Možnosti: pipeline, filepath. Výchozí: kanál.

  • artifact: (Volitelné) Název artefaktu, který se má publikovat. Pokud není nastavená, nastaví se výchozí hodnota jedinečného ID vymezeného pro úlohu.

Často kladené dotazy

Otázka: Co jsou artefakty sestavení?

A: Artefakty sestavení jsou soubory vygenerované sestavením. Další informace o publikování a využívání artefaktů sestavení najdete v tématu Artefakty sestavení.

Otázka: Můžu odstranit artefakty kanálu při opětovném spuštění neúspěšných úloh?

A: Artefakty kanálu se nedají deletovat ani přepisovat. Pokud chcete znovu vygenerovat artefakty při opětovném spuštění neúspěšné úlohy, můžete do názvu artefaktu zahrnout ID úlohy. $(system.JobId) je vhodná proměnná pro tento účel. Další informace o předdefinovaných proměnných najdete v tématu Systémové proměnné.

Otázka: Jak můžu získat přístup k informačním kanálům Artifacts za bránou firewall?

A: Pokud vaše organizace používá bránu firewall nebo proxy server, ujistěte se, že povolíte adresy URL a IP adresy domény Azure Artifacts.