Veröffentlichen und Herunterladen von Pipelineartefakten

Azure DevOps Services

Mit Azure Pipelines können Sie Artefakte aus früheren Stages in Ihrer Pipeline oder aus einer anderen Pipeline herunterladen. Sie können Ihr Artefakt auch in einer Dateifreigabe veröffentlichen oder als Pipelineartefakt zur Verfügung stellen.

Veröffentlichen von Artefakten

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

Hinweis

Das Veröffentlichen von Pipelineartefakten wird in Releasepipelines nicht unterstützt.

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

Hinweis

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

Obwohl der Name des Artefakts optional ist, empfiehlt es sich, einen Namen anzugeben, der den Inhalt Ihres Artefakts genau widerspiegelt. Wenn Sie das Artefakt aus einem Auftrag verwenden möchten, der unter einem anderen Betriebssystem ausgeführt wird, müssen Sie sicherstellen, dass alle Dateipfade für die Zielumgebung gültig sind. Beispielsweise kann ein Dateiname, der das Zeichen \ oder * enthält, unter Windows nicht heruntergeladen werden.

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

Pakete in Azure Artifacts sind unveränderlich. Nachdem Sie ein Paket veröffentlicht haben, wird dessen Version dauerhaft reserviert. Das erneute Ausführen fehlerhafter Aufträge schlägt fehl, wenn das Paket veröffentlicht wurde. Eine gute Möglichkeit, fehlgeschlagene Aufträge erneut auszuführen, ohne auf einen Fehler Paket ist bereits vorhanden zu stoßen, besteht darin, Bedingungen zu verwenden, die nur ausgeführt werden, wenn der vorherige Auftrag erfolgreich war.

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

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

Hinweis

Das Speichern von Pipelineartefakten wird Ihnen nicht in Rechnung gestellt. Das Pipelinecaching ist ebenfalls von der Speicherabrechnung ausgenommen. Weitere Informationen finden Sie unter Welche Artefakte für meinen gesamten abgerechneten 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 einigen Einschränkungen), um anzugeben, welche Dateien beim Veröffentlichen von Artefakten ignoriert werden sollen. Stellen Sie sicher, dass sich die .artifactignore-Datei in dem Verzeichnis befindet, das durch das Argument targetPath der Aufgabe „Pipelineartefakte veröffentlichen“ angegeben wird.

Hinweis

Das Pluszeichen (+) wird in URL-Pfaden und einigen Buildmetadaten für Pakettypen wie Maven nicht unterstützt.

Beispiel: Ignorieren Sie alle Dateien außer EXE-Dateien:

**/*
!*.exe

Wichtig

Azure Artifacts ignorieren automatisch den GIT- Ordnerpfad, wenn Sie über keine .artifactignore-Datei verfügen. Sie können dies umgehen, indem Sie eine leere .artifactignore-Datei erstellen.

Herunterladen von Artefakten

Sie können Artefakte mit YAML, dem klassischen Editor oder der Azure CLI herunterladen.

steps:
- download: current
  artifact: WebApp
  • current: Laden Sie Artefakte herunter, die von der aktuellen Pipelineausführung erstellt wurden. Optionen: current, specific.

Hinweis

Die Liste der veröffentlichten Artefakte ist nur in den folgenden abhängigen Aufträgen verfügbar. Verwenden Sie die Option current daher nur in separaten Aufträgen, die von Aufträgen mit Aufgaben zum Veröffentlichen von Artefakten abhängig sind.

Tipp

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

Hinweis

Das download Schlüsselwort lädt Artefakte herunter. Weitere Informationen finden Sie unter steps.download.

Um ein Pipelineartefakt aus einem anderen Projekt in Ihrer Organisation herunterzuladen, stellen Sie sicher, dass Sie über die entsprechenden Berechtigungen verfügen, die sowohl für Ihr Downstream-Projekt als auch für die Downstream-Pipeline konfiguriert sind. Standardmäßig werden Dateien in $(Pipeline.Workspace) heruntergeladen. Wenn kein Artefaktname angegeben wurde, wird für jedes heruntergeladene Artefakt ein Unterverzeichnis erstellt. Sie können Muster für den Abgleich verwenden, um zu begrenzen, welche Dateien heruntergeladen werden. Weitere Informationen finden Sie unter Muster für Dateiabgleich.

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

Auswahl von Artefakten

Mit einem einzelnen Downloadschritt können ein oder mehrere Artefakte heruntergeladen werden. Um mehrere Artefakte herunterzuladen, lassen Sie das Feld Artefaktname leer, und verwenden Sie Muster für den Dateiabgleich, um zu begrenzen, welche Dateien heruntergeladen werden. ** ist das Standardmuster für den Dateiabgleich (alle Dateien in allen Artefakten).

Einzelnes Artefakt

Wenn ein Artefaktname angegeben wird:

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

  2. Muster für den Dateiabgleich werden relativ zum Stamm des Artefakts ausgewertet. Das Muster *.jar entspricht beispielsweise allen Dateien mit der Erweiterung .jar im Stammverzeichnis des Artefakts.

Im folgenden Beispiel wird veranschaulicht, wie Sie alle *.js-Dateien von einem WebApp-Artefakt herunterladen:

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

Mehrere Artefakte

Wenn kein Artefaktname angegeben wird:

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

  2. Für jedes Artefakt wird ein Unterverzeichnis erstellt.

  3. Muster für den Abgleich sollten davon ausgehen, dass das erste Segment des Musters ein Artefaktname ist (oder einem solchen entspricht). Beispielsweise entspricht WebApp/** allen Dateien aus dem WebApp-Artefakt. Das Muster */*.dll entspricht beispielsweise allen Dateien mit der Erweiterung .dll im Stammverzeichnis des Artefakts.

Im folgenden Beispiel wird veranschaulicht, wie Sie alle .zip-Dateien von allen Artefakten herunterladen:

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

Artefakte in Release- und Bereitstellungsaufträgen

Artefakte werden nur in Bereitstellungsaufträgen automatisch heruntergeladen. Standardmäßig werden Artefakte in $(Pipeline.Workspace) heruntergeladen. Die Aufgabe zum Herunterladen des Artefakts wird nur automatisch eingefügt, wenn Sie den Lifecycle-Hook deploy in Ihrer Bereitstellung verwenden. Um zu verhindern, dass Artefakte automatisch heruntergeladen werden, fügen Sie einen download-Schritt hinzu, und legen Sie dessen Wert auf „none“ fest. In einem regulären Buildauftrag müssen Sie explizit das Schlüsselwort (keyword) download oder die Aufgabe Pipelineartefakt herunterladen verwenden. Weitere Informationen zu den anderen Hooktypen finden Sie unter Lifecycle Hooks.

steps:
- download: none

Verwenden von Artefakten über Stages hinweg

Wenn Sie in der Lage sein möchten, über verschiedene Phasen Ihrer Pipeline auf Ihr Artefakt zuzugreifen, können Sie Ihr Artefakt jetzt in einer Phase veröffentlichen und es dann in der nächsten Phase herunterladen, indem Sie Abhängigkeiten nutzen. Weitere Informationen finden Sie unter Abhängigkeiten von Phase zu Phase.

Beispiel

Im folgenden Beispiel kopieren und veröffentlichen wir einen Skriptordner von unserem Repository aus dem $(Build.ArtifactStagingDirectory). In der zweiten Stage laden wir unser Skript herunter und führen es 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 showing the PowerShell task output

Migrieren von Buildartefakten

Pipelineartefakte sind die nächste Generation von Buildartefakten und sind die empfohlene Methode zum Arbeiten mit Artefakten. Artefakte, die mit der Aufgabe „Buildartefakte veröffentlichen“ veröffentlicht wurden, können weiterhin mithilfe der Option Buildartefakte herunterladen heruntergeladen werden. Es wird jedoch empfohlen, stattdessen die neueste Aufgabe Pipelineartefakt herunterladen zu verwenden.

Bei der Migration von Buildartefakten zu Pipelineartefakten gilt Folgendes:

  1. Standardmäßig lädt die Aufgabe Pipelineartefakt herunterladen Dateien in $(Pipeline.Workspace) herunter. Dies ist der standardmäßige und empfohlene Pfad für alle Artefakttypen.

  2. Muster für den Dateiabgleich für die Aufgabe Buildartefakte herunterladen sollten mit dem Artefaktnamen beginnen (oder diesem entsprechen), und zwar unabhängig davon, ob ein bestimmtes Artefakt angegeben wurde oder nicht. In der Aufgabe Pipelineartefakt herunterladen sollten Muster den Artefaktnamen nicht enthalten, wenn bereits ein Artefaktname angegeben wurde. Weitere Informationen finden Sie unter Auswahl einzelner Artefakte.

Beispiel

- 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: (Erforderlich) Der Pfad zur Datei oder zum Verzeichnis, die oder das veröffentlicht werden soll. Kann absolut oder relativ zum Standardarbeitsverzeichnis sein. Kann Variablen enthalten, aber Platzhalterzeichen werden nicht unterstützt. Standard: $(Pipeline.Workspace).

  • publishLocation: (Erforderlich) Veröffentlichungsort für Artefakte. Wählen Sie aus, ob Sie das Artefakt in Azure Pipelines speichern oder in eine Dateifreigabe kopieren möchten, die vom Pipeline-Agent aus zugänglich sein muss. Optionen: pipeline, filepath. Standard: Pipeline.

  • Artefakt: Name des zu veröffentlichenden Artefakts. Wenn nicht festgelegt, wird standardmäßig eine eindeutige ID verwendet, die für den Auftrag gilt.

Häufig gestellte Fragen

F: Was sind Buildartefakte?

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

F: Kann ich Pipelineartefakte löschen, wenn fehlerhafte Aufträge erneut ausgeführt werden?

A: Pipelineartefakte sind nicht löschbar oder überschreibbar. Wenn Sie beim erneuten Ausführen eines fehlerhaften Auftrags Artefakte neu generieren möchten, können Sie die Auftrags-ID in den Artefaktnamen einschließen. $(system.JobId) ist die geeignete Variable für diesen Zweck. Weitere Informationen zu vordefinierten Variablen finden Sie unter Systemvariablen.

F: Wie kann ich hinter einer Firewall auf Artifacts-Feeds zugreifen?

Wenn Ihre Organisation eine Firewall oder einen Proxyserver verwendet, stellen Sie sicher, dass Sie Azure Artifacts-Domänen-URLs und IP-Adressen zulassen.