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:

Kommentar

Publicering av pipelineartefakter stöds inte i versionspipelines.

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

Kommentar

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 på 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örningen av misslyckade jobb misslyckas om paketet har publicerats. Ett bra sätt att närma dig 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

Kommentar

Du debiteras inte för lagring av pipelineartefakter. Pipeline-Cachelagring är också undantagna från lagringsfakturering. Se Vilka artefakter som 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 när artefakter publiceras. Kontrollera att .artifactignore-filen finns i katalogen som anges av targetPath-argumentet för aktiviteten Publicera pipelineartefakter.

Kommentar

Plustecknet + stöds inte i URL-sökvägar och vissa bygger 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.

Kommentar

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.

Dricks

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

Kommentar

Nyckelordet download laddar ned artefakter. Mer information finns i steps.download.

Om du vill ladda ned en pipelineartefakt från ett annat projekt i organisationen kontrollerar du att du har rätt behörigheter konfigurerade för både ditt nedströmsprojekt och nedströmspipelinen. Som standard laddas filer ned till $(Pipeline.Workspace). Om ett artefaktnamn inte 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

Markering 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). Nedladdningsartefaktuppgiften matas bara in automatiskt när du använder deploy livscykelkroken 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 inget. I ett vanligt byggjobb måste du uttryckligen download använda stegets nyckelord eller uppgiften Ladda ned pipelineartefakt. Se livscykelkrokar för att lära dig mer om de andra typerna av krokar.

steps:
- download: none

Använda artefakter i olika faser

Om du vill kunna komma åt artefakten i olika steg 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 Steg-till-steg-beroenden.

Exempel

I följande exempel kopierar och publicerar vi en skriptmapp från lagringsplatsen till $(Build.ArtifactStagingDirectory). I den andra fasen 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'

Screenshot showing the PowerShell task output

Migrera från byggartefakter

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

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

  1. Som standard laddar aktiviteten Ladda ned pipelineartefakt ned filer till $(Pipeline.Workspace). Det här ä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 specifik 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 enkel artefaktval.

Exempel

- 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: (Krävs) 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. Standard: $(Pipeline.Workspace).

  • publishLocation: (Krävs) Artefakter publicerar plats. 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. Standard: pipeline.

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

Vanliga frågor

F: Vad är byggartefakter?

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

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

S: Pipelineartefakter är inte borttagningsbara eller överskrivningsbara. 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 kan jag komma åt artefakter feeds bakom en brandvägg?

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