Publicera och ladda ned pipelineartefakter

Azure DevOps Services

Med Hjälp av Azure Pipelines kan du ladda ned artefakter från tidigare steg i din pipeline eller från en annan pipeline. Du kan också publicera artefakten till en filresurs eller göra den tillgänglig som en pipelineartefakt.

Publicera artefakter

Du kan publicera dina artefakter med hjälp av YAML, den klassiska redigeraren eller Azure CLI:

Anteckning

Publicering av pipelineartefakter stöds inte i versionspipelines.

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

Anteckning

Nyckelordet publish är en genväg för aktiviteten Publicera pipelineartefakt .

Även om artefaktens namn är valfritt är det en bra idé att ange ett namn som korrekt återspeglar innehållet i artefakten. Om du planerar att använda artefakten från ett jobb som körs i ett annat operativsystem måste du se till att alla filsökvägar är giltiga för målmiljön. Till exempel ett filnamn som innehåller tecknet \ eller * som inte kan laddas ned i Windows.

Sökvägen till den fil/mapp som du vill publicera krävs. Detta kan vara en absolut eller relativ sökväg till $(System.DefaultWorkingDirectory).

Paket i Azure Artifacts är oföränderliga. När du publicerar ett paket reserveras dess version permanent. omkörning av misslyckade jobb misslyckas om paketet har publicerats. Ett bra sätt att hantera detta om du vill kunna köra misslyckade jobb igen utan att det redan finns ett felpaket är att använda Villkor för att endast köra om det tidigare jobbet lyckades.

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

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

Anteckning

Du debiteras inte för lagring av pipelineartefakter. Cachelagring av pipelinen är också undantagen från lagringsfakturering. Se Vilka artefakter räknas mot min totala fakturerade lagring.

Varning

Om du tar bort en pipelinekörning tas alla artefakter som är associerade med den körningen bort.

Använda .artifactignore

.artifactignore använder en liknande syntax som .gitignore (med få begränsningar) för att ange vilka filer som ska ignoreras vid publicering av artefakter. Mer information finns i Använda .artifactignore-filen .

Anteckning

Plustecknet + stöds inte i URL-sökvägar och vissa skapar metadata för pakettyper som Maven.

Exempel: ignorera alla filer utom .exe filer:

**/*
!*.exe

Viktigt

Azure Artifacts ignorerar automatiskt . git-mappsökvägen när du inte har en .artifactignore-fil . Du kan kringgå detta genom att skapa en tom .artifactignore-fil .

Ladda ned artefakter

Du kan ladda ned artefakter med hjälp av YAML, den klassiska redigeraren eller Azure CLI.

steps:
- download: current
  artifact: WebApp
  • aktuell: ladda ned artefakter som skapats av den aktuella pipelinekörningen. Alternativ: aktuell, specifik.

Anteckning

Listan över publicerade artefakter är endast tillgänglig i följande beroende jobb. current Använd därför alternativet endast i separata jobb som är beroende av jobb med publiceringsartefakter.

Tips

Du kan använda Pipeline-resurser för att definiera källan på ett ställe och använda den var som helst i din pipeline.

Anteckning

Nyckelordet download är en genväg för uppgiften Download Pipeline Artifact (Ladda ned pipelineartefakt ).

Som standard laddas filer ned till $(Pipeline.Workspace). Om inget artefaktnamn har angetts skapas en underkatalog för varje nedladdad artefakt. Du kan använda matchande mönster för att begränsa vilka filer som laddas ned. Mer information finns i Filmatchningsmönster .

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

Val av artefakter

Ett enda nedladdningssteg kan ladda ned en eller flera artefakter. Om du vill ladda ned flera artefakter lämnar du fältet artefaktnamn tomt och använder filmatchningsmönster för att begränsa vilka filer som ska laddas ned. ** är standardmönstret för filmatchning (alla filer i alla artefakter).

Enskild artefakt

När ett artefaktnamn anges:

  1. Endast filer för den specifika artefakten laddas ned. Om artefakten inte finns misslyckas uppgiften.

  2. Filmatchningsmönster utvärderas i förhållande till artefaktens rot. Mönstret *.jar matchar till exempel alla filer med ett .jar tillägg i artefaktens rot.

I följande exempel visas hur du laddar ned allt *.js från en artefakt WebApp:

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

Flera artefakter

När inget artefaktnamn har angetts:

  1. Flera artefakter kan laddas ned och uppgiften misslyckas inte om inga filer hittas.

  2. En underkatalog skapas för varje artefakt.

  3. Filmatchningsmönster bör förutsätta att det första segmentet i mönstret är (eller matchar) ett artefaktnamn. Matchar till exempel WebApp/** alla filer från WebApp artefakten. Mönstret */*.dll matchar alla filer med ett .dll tillägg i roten för varje artefakt.

I följande exempel visas hur du laddar ned alla .zip filer från alla artefakter:

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

Artefakter i versions- och distributionsjobb

Artefakter laddas bara ned automatiskt i distributionsjobb. Som standard laddas artefakter ned till $(Pipeline.Workspace). Nedladdningsartefaktaktiviteten matas bara in automatiskt när du använder livscykelhooken deploy i distributionen. Om du vill förhindra att artefakter laddas ned automatiskt lägger du till ett download steg och anger dess värde till none. I ett vanligt byggjobb måste du uttryckligen använda nyckelordet download step eller uppgiften Download Pipeline Artifact (Ladda ned pipelineartefakt ). Mer information om andra typer av krokar finns i livscykelkrokar .

steps:
- download: none

Använda artefakter mellan faser

Om du vill kunna komma åt artefakten i olika faser i pipelinen kan du nu publicera artefakten i ett steg och sedan ladda ned den i nästa steg med hjälp av beroenden. Mer information finns i Mellanlagra beroenden .

Exempel

I följande exempel kopierar och publicerar vi en skriptmapp från vår lagringsplats till $(Build.ArtifactStagingDirectory). I det andra steget laddar vi ned och kör skriptet.

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'

Skärmbild som visar PowerShell-aktivitetens utdata

Migrera från byggartefakter

Pipelineartefakter är nästa generations byggartefakter och är det rekommenderade sättet att arbeta med artefakter. Artefakter som publiceras med uppgiften Publicera byggartefakter kan fortfarande laddas ned med hjälp av Ladda ned byggartefakter, men vi rekommenderar att du använder den senaste uppgiften Hämta pipelineartefakt i stället.

När du migrerar från byggartefakter till pipelineartefakter:

  1. Som standard laddar aktiviteten Download Pipeline Artifact (Ladda ned pipelineartefakt) ned filer till $(Pipeline.Workspace). Detta är standardsökvägen och den rekommenderade sökvägen för alla typer av artefakter.

  2. Filmatchningsmönster för aktiviteten Hämta byggartefakter förväntas börja med (eller matcha) artefaktnamnet, oavsett om en viss artefakt har angetts eller inte. I aktiviteten Ladda ned pipelineartefakt bör mönster inte innehålla artefaktnamnet när ett artefaktnamn redan har angetts. Mer information finns i val av enskild artefakt.

Exempel

- task: PublishPipelineArtifact@1
  displayName: 'Publish'
  inputs:
    targetPath: $(Build.ArtifactStagingDirectory)/**
    ${{ if eq(variables['Build.SourceBranchName'], 'main') }}:
        artifactName: 'prod'
    ${{ else }}:
        artifactName: 'dev'
    artifactType: 'pipeline'
  • targetPath: Sökvägen till filen eller katalogen som ska publiceras. Kan vara absolut eller i förhållande till standardarbetskatalogen. Kan innehålla variabler, men jokertecken stöds inte.

  • artifactName: Namnet på artefakten som ska publiceras. Om det inte anges är standardvärdet ett unikt ID som är begränsat till jobbet.

  • artifactType: Välj om artefakten ska lagras i Azure Pipelines eller kopiera den till en filresurs som måste vara tillgänglig från pipelineagenten. Alternativ: pipeline, filepath.

Vanliga frågor

F: Vad är byggartefakter?

S: Byggartefakter är de filer som genereras av bygget. Mer information om hur du publicerar och använder dina byggartefakter finns i Skapa artefakter .

F: Stöder du publicering av artefakter till en delad mapp?

S: Inte för närvarande, men den här funktionen är planerad.

F: Kan jag ta bort pipelineartefakter när jag kör misslyckade jobb igen?

S: Pipelineartefakter kan inte tas bort eller vara overwritable. Om du vill återskapa artefakter när du kör ett misslyckat jobb igen kan du inkludera jobb-ID:t i artefaktnamnet. $(system.JobId) är lämplig variabel för detta ändamål. Mer information om fördefinierade variabler finns i Systemvariabler .

F: Hur kommer jag åt artefaktflöden bakom en brandvägg?

S: Om din organisation använder en brandvägg eller en proxyserver kontrollerar du att du tillåter URL:er och IP-adresser för Azure Artifacts-domäner.