Publikowanie i pobieranie artefaktów potoku

Azure DevOps Services

Za pomocą usługi Azure Pipelines można pobierać artefakty z wcześniejszych etapów potoku lub z innego potoku. Możesz również opublikować artefakt w udziale plików lub udostępnić go jako artefakt potoku.

Publikowanie artefaktów

Artefakty można publikować przy użyciu języka YAML, edytora klasycznego lub interfejsu wiersza polecenia platformy Azure:

Uwaga

Publikowanie artefaktów potoku nie jest obsługiwane w potokach wydania.

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

Uwaga

Słowo publish kluczowe to skrót do zadania Publikowanie artefaktu potoku.

Chociaż nazwa artefaktu jest opcjonalna, dobrym rozwiązaniem jest określenie nazwy, która dokładnie odzwierciedla zawartość artefaktu. Jeśli planujesz używać artefaktu z zadania uruchomionego w innym systemie operacyjnym, upewnij się, że wszystkie ścieżki plików są prawidłowe dla środowiska docelowego. Na przykład nazwa pliku zawierająca znak \ lub * nie będzie można pobrać go w systemie Windows.

Ścieżka pliku/folderu, który chcesz opublikować, jest wymagana. Może to być bezwzględna lub względna ścieżka do $(System.DefaultWorkingDirectory).

Pakiety w usłudze Azure Artifacts są niezmienne. Po opublikowaniu pakietu jego wersja zostanie trwale zarezerwowana. Ponowne uruchamianie nieudanych zadań zakończy się niepowodzeniem, jeśli pakiet został opublikowany. Dobrym sposobem podejścia do tego, jeśli chcesz mieć możliwość ponownego uruchamiania zadań zakończonych niepowodzeniem bez wystąpienia pakietu błędów , jest użycie warunków do uruchomienia tylko wtedy, gdy poprzednie zadanie zakończyło się pomyślnie.

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

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

Uwaga

Nie będą naliczane opłaty za przechowywanie artefaktów potoku. Buforowanie potoku jest również wykluczony z rozliczeń magazynu. Zobacz , które artefakty są liczone w stosunku do mojego łącznego rozliczanego magazynu.

Uwaga

Usunięcie przebiegu potoku spowoduje usunięcie wszystkich artefaktów skojarzonych z tym uruchomieniem.

Korzystanie z elementu artifactignore

.artifactignore Używa podobnej składni do .gitignore (z kilkoma ograniczeniami), aby określić, które pliki powinny być ignorowane podczas publikowania artefaktów. Upewnij się, że plik artifactignore znajduje się w katalogu określonym przez argument targetPath zadania Publish Pipeline Artifacts.

Uwaga

Znak + plus nie jest obsługiwany w ścieżkach adresu URL i niektóre metadane kompilacji dla typów pakietów, takich jak Maven.

Przykład: ignoruj wszystkie pliki z wyjątkiem plików exe :

**/*
!*.exe

Ważne

Usługa Azure Artifacts automatycznie ignoruje ścieżkę folderu .git , gdy nie masz pliku artifactignore . Można to obejść, tworząc pusty plik artifactignore .

Pobieranie artefaktów

Artefakty można pobrać przy użyciu języka YAML, edytora klasycznego lub interfejsu wiersza polecenia platformy Azure.

steps:
- download: current
  artifact: WebApp
  • current: pobieranie artefaktów utworzonych przez bieżące uruchomienie potoku. Opcje: bieżące, specyficzne.

Uwaga

Lista opublikowanych artefaktów będzie dostępna tylko w następujących zadaniach zależnych. W związku z tym należy używać current opcji tylko w osobnych zadaniach, które mają zależność od zadań z zadaniami publikowania artefaktów.

Napiwek

Za pomocą zasobów potoku można zdefiniować źródło w jednym miejscu i używać go w dowolnym miejscu w potoku.

Uwaga

Słowo download kluczowe pobiera artefakty. Aby uzyskać więcej informacji, zobacz steps.download.

Aby pobrać artefakt potoku z innego projektu w organizacji, upewnij się, że masz odpowiednie uprawnienia skonfigurowane zarówno dla projektu podrzędnego, jak i potoku podrzędnego. Domyślnie pliki są pobierane do pliku $(Pipeline.Workspace). Jeśli nie określono nazwy artefaktu, dla każdego pobranego artefaktu zostanie utworzony podkatalog. Możesz użyć pasujących wzorców, aby ograniczyć pobieranie plików. Aby uzyskać więcej szczegółów, zobacz Wzorce dopasowywania plików.

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

Wybór artefaktów

Jeden krok pobierania może pobrać co najmniej jeden artefakt. Aby pobrać wiele artefaktów, pozostaw puste pole nazwy artefaktu i użyj wzorców dopasowywania plików, aby ograniczyć pobieranie plików. ** jest domyślnym wzorcem dopasowywania plików (wszystkie pliki we wszystkich artefaktach).

Pojedynczy artefakt

Po określeniu nazwy artefaktu:

  1. Pobierane są tylko pliki dla tego konkretnego artefaktu. Jeśli artefakt nie istnieje, zadanie zakończy się niepowodzeniem.

  2. Wzorce dopasowywania plików są oceniane względem katalogu głównego artefaktu. Na przykład wzorzec *.jar pasuje do wszystkich plików z .jar rozszerzeniem w katalogu głównym artefaktu.

Poniższy przykład ilustruje sposób pobierania wszystkich *.js z artefaktu WebApp:

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

Wiele artefaktów

Jeśli nie określono nazwy artefaktu:

  1. Można pobrać wiele artefaktów, a zadanie nie kończy się niepowodzeniem, jeśli nie znaleziono żadnych plików.

  2. Dla każdego artefaktu jest tworzony podkatalog.

  3. Wzorce dopasowywania plików powinny zakładać, że pierwszy segment wzorca to (lub pasuje) nazwa artefaktu. Na przykład WebApp/** pasuje do wszystkich plików z artefaktu WebApp . Wzorzec */*.dll pasuje do wszystkich plików z .dll rozszerzeniem w katalogu głównym każdego artefaktu.

W poniższym przykładzie pokazano, jak pobrać wszystkie .zip pliki ze wszystkich artefaktów:

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

Artefakty w zadaniach wydania i wdrażania

Artefakty są pobierane automatycznie tylko w zadaniach wdrażania. Domyślnie artefakty są pobierane do $(Pipeline.Workspace)programu . Zadanie artefaktu pobierania zostanie automatycznie wprowadzone tylko w przypadku korzystania z elementu zaczepienia cyklu życia we wdrożeniu deploy . Aby zatrzymać automatyczne pobieranie artefaktów, dodaj download krok i ustaw jego wartość na wartość none. W zwykłym zadaniu kompilacji należy jawnie użyć słowa kluczowego download krok lub zadania Pobierz artefakt potoku . Zobacz punkt zaczepienia cyklu życia, aby dowiedzieć się więcej o innych typach punktów zaczepienia.

steps:
- download: none

Używanie artefaktów między etapami

Jeśli chcesz mieć dostęp do artefaktu na różnych etapach w swoim potoku, teraz możesz opublikować swój artefakt na jednym etapie, a następnie pobrać go na następnym etapie przy użyciu zależności. Aby uzyskać więcej informacji, zobacz Zależności między etapami.

Przykład

W poniższym przykładzie skopiujemy i opublikujemy folder skryptu z repozytorium do folderu $(Build.ArtifactStagingDirectory). W drugim etapie pobierzemy i uruchomimy nasz skrypt.

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

Migrowanie z artefaktów kompilacji

Artefakty potoku to następna generacja artefaktów kompilacji i są zalecanym sposobem pracy z artefaktami. Artefakty opublikowane przy użyciu zadania Publikuj artefakty kompilacji nadal można pobrać przy użyciu polecenia Pobierz artefakty kompilacji, ale zalecamy użycie najnowszego zadania Artefakt potoku pobierania.

Podczas migracji z artefaktów kompilacji do artefaktów potoku:

  1. Domyślnie zadanie Pobierz artefakt potoku pobiera pliki do $(Pipeline.Workspace)programu . Jest to domyślna i zalecana ścieżka dla wszystkich typów artefaktów.

  2. Wzorce dopasowywania plików dla zadania Pobierz artefakty kompilacji powinny rozpoczynać się od (lub dopasować) nazwę artefaktu, niezależnie od tego, czy określony artefakt został określony, czy nie. W zadaniu Pobieranie artefaktu potoku wzorce nie powinny zawierać nazwy artefaktu, gdy nazwa artefaktu została już określona. Aby uzyskać więcej informacji, zobacz wybór pojedynczego artefaktu.

Przykład

- 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: (Wymagane) Ścieżka pliku lub katalogu do opublikowania. Może być bezwzględny lub względny względem domyślnego katalogu roboczego. Może zawierać zmienne, ale symbole wieloznaczne nie są obsługiwane. Wartość domyślna: $(Pipeline.Workspace).

  • publishLocation: (Wymagane) Lokalizacje publikowania artefaktów. Wybierz, czy artefakt ma być przechowywany w usłudze Azure Pipelines, czy skopiować go do udziału plików, który musi być dostępny z agenta potoku. Opcje: pipeline, filepath. Ustawienie domyślne: potok.

  • artifact: (Opcjonalnie) Nazwa artefaktu do opublikowania. Jeśli nie zostanie ustawiona, wartość domyślna to unikatowy identyfikator o określonym zakresie zadania.

Często zadawane pytania

Pyt.: Co to są artefakty kompilacji?

1: Artefakty kompilacji to pliki generowane przez kompilację. Zobacz Build Artifacts (Tworzenie artefaktów ), aby dowiedzieć się więcej na temat publikowania artefaktów kompilacji i korzystania z nich.

Pyt.: Czy mogę usunąć artefakty potoku po ponownym uruchomieniu zadań, które zakończyły się niepowodzeniem?

1: Artefakty potoku nie można usuwać ani zastępować. Jeśli chcesz ponownie wygenerować artefakty po ponownym uruchomieniu zadania, które zakończyło się niepowodzeniem, możesz uwzględnić identyfikator zadania w nazwie artefaktu. $(system.JobId) jest odpowiednią zmienną w tym celu. Zobacz Zmienne systemowe, aby dowiedzieć się więcej o wstępnie zdefiniowanych zmiennych.

Pyt.: Jak mogę uzyskać dostęp do kanałów informacyjnych Artifacts za zaporą?

Odpowiedź: Jeśli organizacja korzysta z zapory lub serwera proxy, upewnij się, że zezwalasz na adresy URL i adresy IP domeny usługi Azure Artifacts.