Veröffentlichen und Herunterladen von Pipelineartefakten

Azure DevOps Services

Mithilfe von Azure-Pipelines können Sie Artefakte aus früheren Phasen in Ihrer Pipeline oder aus einer anderen Pipeline herunterladen. Sie können Ihr Artefakte auch in einer Dateifreigabe veröffentlichen oder als Pipelineartefakt verfügbar machen.

Veröffentlichen von Artefakten

Sie können Ihre Artefakte mithilfe von YAML, dem klassischen Editor oder Azure CLI veröffentlichen:

Hinweis

Veröffentlichungspipelineartefakte werden in Releasepipelinen nicht unterstützt.

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

Hinweis

Das publish Schlüsselwort ist eine Verknüpfung für die Aufgabe "Pipelineartefakt veröffentlichen ".

Obwohl der Name des Artefaktes optional ist, empfiehlt es sich, einen Namen anzugeben, der den Inhalt Ihres Artefaktes genau widerspiegelt. Wenn Sie beabsichtigen, das Artefakte aus einem Auftrag zu nutzen, der auf einem anderen Betriebssystem ausgeführt wird, müssen Sie sicherstellen, dass alle Dateipfade für die Zielumgebung gültig sind. Ein Dateiname, der das Zeichen \ enthält, kann * beispielsweise nicht unter Windows heruntergeladen werden.

Der Pfad der Datei/des Ordners, den Sie veröffentlichen möchten, ist erforderlich. Dies kann ein absoluter oder ein relativer Pfad zu $(System.DefaultWorkingDirectory).

Pakete in Azure-Artefakten sind unveränderlich. Sobald Sie ein Paket veröffentlichen, wird seine Version dauerhaft reserviert. Fehler beim erneuten Ausführen von Aufträgen, wenn das Paket veröffentlicht wurde. Eine gute Möglichkeit zur Vorgehensweise, wenn Sie fehlgeschlagene Aufträge erneut ausführen möchten, ohne dass ein Fehlerpaket bereits vorhanden ist, besteht darin, bedingungen nur auszuführen, wenn der vorherige Auftrag erfolgreich war.

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

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

Hinweis

Sie werden nicht für das Speichern von Pipelineartefakten in Rechnung gestellt. Das Zwischenspeichern von Pipelines ist auch von der Speicherabrechnung ausgenommen. Sehen Sie , welche Artefakte zu meinem gesamten berechneten Speicher zählen.

Achtung

Das Löschen einer Pipelineausführung führt zum Löschen aller Artefakte, die dieser Ausführung zugeordnet sind.

Verwenden von .artifactignore

.artifactignore verwendet eine ähnliche Syntax wie .gitignore (mit wenigen Einschränkungen), um anzugeben, welche Dateien beim Veröffentlichen von Artefakten ignoriert werden sollen. Weitere Details finden Sie in der Datei "Artefakteignore" .

Hinweis

Das Pluszeichenzeichen + wird in URL-Pfaden und einigen Builds-Metadaten für Pakettypen wie Maven nicht unterstützt.

Beispiel: Ignorieren aller Dateien außer .exe Dateien:

**/*
!*.exe

Wichtig

Azure-Artefakte ignorieren automatisch den Git-Ordnerpfad, wenn Sie keine ARTEFAKTE-Datei haben. Sie können dies umgehen, indem Sie eine leere Artefaktignore-Datei erstellen.

Herunterladen von Artefakten

Sie können Artefakte mithilfe von YAML, dem klassischen Editor oder azure CLI herunterladen.

steps:
- download: current
  artifact: WebApp
  • aktuell: Laden Sie Artefakte herunter, die von der aktuellen Pipeline ausgeführt werden. Optionen: aktuell, spezifisch.

Hinweis

Die Liste der veröffentlichten Artefakte ist nur in folgenden abhängigen Aufträgen verfügbar. Verwenden Sie current daher option nur in separaten Aufträgen, die abhängigkeit von Aufträgen mit Veröffentlichungsartefaktaufgaben haben.

Tipp

Sie können Pipelineressourcen verwenden, um Ihre Quelle an einer zentralen Stelle zu definieren und sie an einer beliebigen Stelle in Ihrer Pipeline zu verwenden.

Hinweis

Das download Schlüsselwort ist eine Verknüpfung für die Aufgabe "Pipeline-Artefakte herunterladen" .

Standardmäßig werden Dateien auf $(Pipeline.Workspace) heruntergeladen. Wenn kein Artefaktname angegeben wurde, wird für jedes heruntergeladene Artefakte ein Unterverzeichnis erstellt. Sie können übereinstimmende Muster verwenden, um zu beschränken, welche Dateien heruntergeladen werden. Weitere Details finden Sie unter Dateiabgleichsmuster .

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

Auswahl von Artefakten

Ein einzelner Downloadschritt kann ein oder mehrere Artefakte herunterladen. Um mehrere Artefakte herunterzuladen, lassen Sie das Artefaktnamenfeld leer, und verwenden Sie Dateiabgleichsmuster, um zu begrenzen, welche Dateien heruntergeladen werden. ** ist das Standarddateiabgleichsmuster (alle Dateien in allen Artefakten).

Einzelnes Artefakt

Wenn ein Artefaktname angegeben wird:

  1. Nur Dateien für dieses bestimmte Artefakt werden heruntergeladen. Wenn das Artefakte nicht vorhanden ist, schlägt die Aufgabe fehl.

  2. Dateiabgleichsmuster werden relativ zum Stamm des Artefaktes ausgewertet. Das Muster *.jar entspricht beispielsweise allen Dateien mit einer .jar Erweiterung am Stamm des Artefaktes.

Im folgenden Beispiel wird veranschaulicht, wie Sie alle *.js aus einem Artefakte WebAppherunterladen:

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

Mehrere Artefakte

Wenn kein Artefaktename angegeben wird:

  1. Mehrere Artefakte können heruntergeladen werden, und die Aufgabe schlägt nicht fehl, wenn keine Dateien gefunden werden.

  2. Ein Unterverzeichnis wird für jedes Artefakte erstellt.

  3. Dateiabgleichsmuster sollten davon ausgehen, dass das erste Segment des Musters (oder übereinstimmungen) ein Artefaktename ist. Entspricht beispielsweise WebApp/** allen Dateien aus dem WebApp Artefakte. Das Muster */*.dll entspricht allen Dateien mit einer .dll Erweiterung im Stamm jedes Artefaktes.

Im folgenden Beispiel wird veranschaulicht, wie alle Dateien aus allen .zip Artefakten heruntergeladen werden:

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

Artefakte in Release- und Bereitstellungsaufträgen

Artefakte werden nur automatisch in Bereitstellungsaufträgen heruntergeladen. Standardmäßig werden Artefakte in System.ArtifactsDirectory. Die Downloadartefaktaufgabe wird nur dann automatisch eingefügt, wenn Sie den deploy Lebenszyklus-Hook in Ihrer Bereitstellung verwenden. Um Artefakte automatisch herunterzuladen, fügen Sie einen download Schritt hinzu, und legen Sie den Wert auf keine fest. In einem regulären Buildauftrag müssen Sie das Schrittschlüsselwort oder die Aufgabe "downloadPipeline-Artefakte herunterladen" explizit verwenden. Weitere Informationen zu den anderen Arten von Hooks finden Sie unter Lebenszyklus-Hooks .

steps:
- download: none

Verwenden von Artefakten in Phasen

Wenn Sie in der Lage sein möchten, auf Ihr Artefakte in verschiedenen Phasen in Ihrer Pipeline zuzugreifen, können Sie ihr Artefakte jetzt in einer Phase veröffentlichen und dann in der nächsten Phase mithilfe von Abhängigkeiten herunterladen. Weitere Details finden Sie unter "Phase" zu Phasenabhängigkeiten .

Beispiel

Im folgenden Beispiel werden wir einen Skriptordner aus unserem Repo in das $(Build.ArtifactStagingDirectory)Dokument kopieren und veröffentlichen. In der zweiten Phase laden wir unser Skript herunter und führen das Skript aus.

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 mit der PowerShell-Vorgangsausgabe

Migrieren von Buildartefakten

Pipeline-Artefakte sind die nächste Generation von Buildartefakten und sind die empfohlene Möglichkeit, mit Artefakten zu arbeiten. Artefakte, die mithilfe der Aufgabe "Veröffentlichen von Buildartefakten veröffentlichen" veröffentlicht wurden, können weiterhin mithilfe von Download-Build-Artefakten heruntergeladen werden, es wird jedoch empfohlen, stattdessen die neueste Download-Pipeline-Artefakteaufgabe zu verwenden.

Beim Migrieren von Buildartefakten zu Pipelineartefakten:

  1. Standardmäßig lädt die Aufgabe "Pipeline-Artefakte herunterladen " Dateien auf $(Pipeline.Workspace). Dies ist der Standard- und empfohlene Pfad für alle Arten von Artefakten.

  2. Dateiabgleichsmuster für die Aufgabe "Build-Artefakte herunterladen " werden erwartet, dass der Artefaktname (oder die Übereinstimmung) des Artefaktes beginnt, unabhängig davon, ob ein bestimmtes Artefakte angegeben wurde oder nicht. In der Aufgabe "Pipeline-Artefakte herunterladen " sollten Muster den Artefaktnamen nicht einschließen, wenn bereits ein Artefaktename angegeben wurde. Weitere Informationen finden Sie unter einzelner Artefakteauswahl.

Beispiel

- task: PublishPipelineArtifact@1
  displayName: 'Publish'
  inputs:
    targetPath: $(Build.ArtifactStagingDirectory)/**
    ${{ if eq(variables['Build.SourceBranchName'], 'main') }}:
        artifactName: 'prod'
    ${{ else }}:
        artifactName: 'dev'
    artifactType: 'pipeline'

Häufig gestellte Fragen

F: Was sind Buildartefakte?

A: Build-Artefakte sind die Dateien, die von Ihrem Build generiert werden. Weitere Informationen zum Veröffentlichen und Nutzen Ihrer Buildartefakte finden Sie unter "Build-Artefakte ".

F: Unterstützen Sie die Veröffentlichung von Artefakten in einem freigegebenen Ordner?

A: Derzeit nicht, aber dieses Feature ist geplant.

F: Kann ich Pipeline-Artefakte löschen, wenn Fehleraufträge erneut ausgeführt werden?

A: Pipeline-Artefakte sind nicht deletable oder überschreibbar. Wenn Sie Artefakte neu generieren möchten, wenn Sie einen fehlgeschlagenen Auftrag erneut ausführen, können Sie die Auftrags-ID im Artefaktnamen einschließen. $(system.JobId) ist die entsprechende Variable für diesen Zweck. Weitere Informationen zu vordefinierten Variablen finden Sie unter Systemvariablen .