Pijplijnartefacten publiceren en downloaden

Azure DevOps Services

Met Behulp van Azure Pipelines kunt u artefacten downloaden uit eerdere fasen in uw pijplijn of vanuit een andere pijplijn. U kunt uw artefact ook publiceren naar een bestandsshare of deze beschikbaar maken als een pijplijnartefact.

Artefacten publiceren

U kunt uw artefacten publiceren met behulp van YAML, de klassieke editor of Azure CLI:

Notitie

Het publiceren van pijplijnartefacten wordt niet ondersteund in release-pijplijnen.

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

Notitie

Het publish trefwoord is een snelkoppeling voor de taak Pijplijnartefact publiceren.

Hoewel de naam van het artefact optioneel is, is het een goed idee om een naam op te geven die de inhoud van uw artefact nauwkeurig weergeeft. Als u van plan bent het artefact te gebruiken van een taak die wordt uitgevoerd op een ander besturingssysteem, moet u ervoor zorgen dat alle bestandspaden geldig zijn voor de doelomgeving. Een bestandsnaam met het teken \ of * kan niet worden gedownload in Windows.

Het pad van het bestand/de map die u wilt publiceren, is vereist. Dit kan een absoluut of een relatief pad naar $(System.DefaultWorkingDirectory).

Pakketten in Azure Artifacts zijn onveranderbaar. Zodra u een pakket publiceert, wordt de bijbehorende versie permanent gereserveerd. Het opnieuw uitvoeren van mislukte taken mislukt als het pakket is gepubliceerd. Een goede manier om dit te benaderen als u mislukte taken opnieuw wilt uitvoeren zonder dat er al een foutpakket bestaat, is het gebruik van voorwaarden om alleen uit te voeren als de vorige taak is geslaagd.

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

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

Notitie

Er worden geen kosten in rekening gebracht voor het opslaan van pijplijnartefacten. Pijplijncaching is ook vrijgesteld van opslagfacturering. Bekijk welke artefacten tellen mee voor mijn totale gefactureerde opslag.

Let op

Als u een pijplijnuitvoering verwijdert, worden alle artefacten verwijderd die aan die uitvoering zijn gekoppeld.

.artifactignore gebruiken

.artifactignore gebruikt een vergelijkbare syntaxis als .gitignore (met enkele beperkingen) om op te geven welke bestanden moeten worden genegeerd bij het publiceren van artefacten. Zorg ervoor dat het .artifactignore-bestand zich in de map bevindt die is opgegeven door het targetPath-argument van de taak Publish Pipeline Artifacts.

Notitie

Het plusteken + wordt niet ondersteund in URL-paden en sommige buildsmetagegevens voor pakkettypen zoals Maven.

Voorbeeld: alle bestanden negeren behalve .exe-bestanden :

**/*
!*.exe

Belangrijk

Azure Artifacts negeert automatisch het pad naar de .git-map wanneer u geen .artifactignore-bestand hebt. U kunt dit omzeilen door een leeg .artifactignore-bestand te maken.

Artefacten downloaden

U kunt artefacten downloaden met behulp van YAML, de klassieke editor of Azure CLI.

steps:
- download: current
  artifact: WebApp
  • current: download artefacten die zijn geproduceerd door de huidige pijplijnuitvoering. Opties: actueel, specifiek.

Notitie

De lijst met gepubliceerde artefacten is alleen beschikbaar in de volgende afhankelijke taken. current Gebruik daarom de optie alleen in afzonderlijke taken die afhankelijk zijn van taken met publicatieartefactentaken.

Tip

U kunt pijplijnbronnen gebruiken om uw bron op één plaats te definiëren en deze overal in uw pijplijn te gebruiken.

Notitie

Met het download trefwoord worden artefacten gedownload. Zie steps.download voor meer informatie.

Als u een pijplijnartefact wilt downloaden uit een ander project binnen uw organisatie, moet u ervoor zorgen dat u de juiste machtigingen hebt geconfigureerd voor zowel uw downstreamproject als downstream-pijplijn. Bestanden worden standaard gedownload naar $(Pipeline.Workspace). Als er geen artefactnaam is opgegeven, wordt er een submap gemaakt voor elk gedownload artefact. U kunt overeenkomende patronen gebruiken om te beperken welke bestanden worden gedownload. Zie Patronen voor bestandskoppeling voor meer informatie.

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

Selectie van artefacten

Eén downloadstap kan een of meer artefacten downloaden. Als u meerdere artefacten wilt downloaden, laat u het veld naam van het artefact leeg en gebruikt u bestandskoppelingspatronen om te beperken welke bestanden worden gedownload. ** is het standaardpatroon voor bestandskoppeling (alle bestanden in alle artefacten).

Eén artefact

Wanneer een artefactnaam is opgegeven:

  1. Alleen bestanden voor dat specifieke artefact worden gedownload. Als het artefact niet bestaat, mislukt de taak.

  2. Bestandskoppelingspatronen worden geëvalueerd ten opzichte van de hoofdmap van het artefact. Het patroon *.jar komt bijvoorbeeld overeen met alle bestanden met een .jar extensie in de hoofdmap van het artefact.

In het volgende voorbeeld ziet u hoe u alles *.js kunt downloaden van een artefact WebApp:

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

Meerdere artefacten

Wanneer er geen artefactnaam is opgegeven:

  1. Er kunnen meerdere artefacten worden gedownload en de taak mislukt niet als er geen bestanden worden gevonden.

  2. Er wordt een submap gemaakt voor elk artefact.

  3. Bij bestandskoppelingspatronen wordt ervan uitgegaan dat het eerste segment van het patroon een artefactnaam is (of overeenkomt). Komt bijvoorbeeld WebApp/** overeen met alle bestanden van het WebApp artefact. Het patroon */*.dll komt overeen met alle bestanden met een .dll extensie in de hoofdmap van elk artefact.

In het volgende voorbeeld ziet u hoe u alle .zip bestanden van alle artefacten kunt downloaden:

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

Artefacten in release- en implementatietaken

Artefacten worden alleen automatisch gedownload in implementatietaken. Artefacten worden standaard gedownload naar $(Pipeline.Workspace). De downloadartefacttaak wordt alleen automatisch geïnjecteerd wanneer u de deploy levenscyclushook in uw implementatie gebruikt. Als u wilt voorkomen dat artefacten automatisch worden gedownload, voegt u een download stap toe en stelt u de waarde ervan in op geen. In een normale buildtaak moet u expliciet het download trefwoord of de taak Pijplijnartefact downloaden gebruiken. Zie levenscyclushook voor meer informatie over de andere typen hooks.

steps:
- download: none

Artefacten in fasen gebruiken

Als u toegang wilt hebben tot uw artefact in verschillende fasen in uw pijplijn, kunt u uw artefact nu in één fase publiceren en het vervolgens downloaden in de volgende fase met behulp van afhankelijkheden. Zie Fase-tot-fase afhankelijkheden voor meer informatie.

Opmerking

In het volgende voorbeeld kopiëren en publiceren we een scriptmap van onze opslagplaats naar de $(Build.ArtifactStagingDirectory). In de tweede fase downloaden en voeren we ons script uit.

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

Migreren van buildartefacten

Pijplijnartefacten zijn de volgende generatie buildartefacten en zijn de aanbevolen manier om met artefacten te werken. Artefacten die zijn gepubliceerd met behulp van de taak Build Artifacts publiceren, kunnen nog steeds worden gedownload met buildartefacten downloaden, maar we raden u aan de meest recente taak Pijplijnartefact te gebruiken.

Bij het migreren van buildartefacten naar pijplijnartefacten:

  1. De taak Pijplijnartefact downloaden downloadt standaard bestanden naar $(Pipeline.Workspace). Dit is het standaardpad en het aanbevolen pad voor alle typen artefacten.

  2. Bestandskoppelingspatronen voor de taak BuildArtefacten downloaden beginnen naar verwachting met de naam (of overeenkomst) van het artefact, ongeacht of er een specifiek artefact is opgegeven of niet. In de taak Pijplijnartefact downloaden mogen patronen de artefactnaam niet bevatten wanneer er al een artefactnaam is opgegeven. Zie selectie van één artefact voor meer informatie.

Opmerking

- 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: (vereist) Het pad van het bestand of de map die moet worden gepubliceerd. Kan absoluut of relatief zijn ten opzichte van de standaardwerkmap. Kan variabelen bevatten, maar jokertekens worden niet ondersteund. Standaard: $(Pipeline.Workspace).

  • publishLocation: (Vereist) Artefacten publiceren locatie. Kies of u het artefact in Azure Pipelines wilt opslaan of wilt kopiëren naar een bestandsshare die toegankelijk moet zijn via de pijplijnagent. Opties: pipeline, filepath. Standaard: pijplijn.

  • artefact: (Optioneel) Naam van het artefact dat moet worden gepubliceerd. Als dit niet is ingesteld, wordt standaard een unieke id ingesteld op de taak.

Veelgestelde vragen

V: Wat zijn buildartefacten?

A: Build-artefacten zijn de bestanden die door uw build worden gegenereerd. Zie Build Artifacts voor meer informatie over het publiceren en gebruiken van uw buildartefacten.

V: Kan ik pijplijnartefacten verwijderen bij het opnieuw uitvoeren van mislukte taken?

A: Pijplijnartefacten zijn niet te verwijderen of overschrijfbaar. Als u artefacten opnieuw wilt genereren wanneer u een mislukte taak opnieuw uitvoert, kunt u de taak-id opnemen in de naam van het artefact. $(system.JobId) is de juiste variabele voor dit doel. Zie Systeemvariabelen voor meer informatie over vooraf gedefinieerde variabelen.

V: Hoe krijg ik toegang tot artefactenfeeds achter een firewall?

A: Als uw organisatie een firewall of een proxyserver gebruikt, moet u ervoor zorgen dat u URL's en IP-adressen van Azure Artifacts-domeinen toestaat.