Publikowanie i pobieranie artefaktów potoku

Usługa 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ącego znak \ lub * nie będzie można pobrać jej w systemie Windows.

Wymagana jest ścieżka pliku/folderu, który chcesz opublikować. 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ż wykluczone z rozliczeń magazynu. Zobacz , które artefakty są zliczane do mojego łącznego rozliczonego magazynu.

Przestroga

Usunięcie uruchomienia 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 mają być ignorowane podczas publikowania artefaktów. Aby uzyskać więcej informacji, zobacz Use the .artifactignore file (Korzystanie z pliku artifactignore ).

Uwaga

Znak + plus nie jest obsługiwany w ścieżkach 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 generowanych 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 oddzielnych zadaniach, które mają zależność od zadań z zadaniami publikowania artefaktów.

Porada

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 to skrót do zadania Pobierz artefakt potoku .

Domyślnie pliki są pobierane do elementu $(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 informacji, zobacz Wzorce dopasowywania plików .

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

Wybór artefaktów

Jeden krok pobierania może pobrać jeden lub więcej artefaktów. Aby pobrać wiele artefaktów, pozostaw puste pole nazwy artefaktu i użyj wzorców dopasowywania plików, aby ograniczyć pobieranie plików. ** to domyślny wzorzec 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. Podkatalog jest tworzony dla każdego artefaktu.

  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 System.ArtifactsDirectory. Zadanie artefaktu pobierania zostanie automatycznie wstrzyknięte tylko w przypadku korzystania z zaczepienia cyklu życia we wdrożeniu deploy . Aby zatrzymać pobieranie artefaktów automatycznie, dodaj download krok i ustaw jej wartość na none. W zwykłym zadaniu kompilacji należy jawnie użyć słowa kluczowego download krok lub zadania Pobierz artefakt potoku . Zobacz punkty zaczepienia cyklu życia , aby dowiedzieć się więcej o innych typach haków.

steps:
- download: none

Używanie artefaktów na różnych etapach

Jeśli chcesz mieć dostęp do artefaktu na różnych etapach potoku, możesz teraz opublikować 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 Etap do etapu zależności .

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 są następną generacją 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 funkcji Pobierz artefakty kompilacji, ale zalecamy użycie najnowszego zadania Pobierz artefakt potoku .

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

  1. Domyślnie zadanie Pobierz artefakt potoku pobiera pliki do $(Pipeline.Workspace)pliku . 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 nazwy artefaktu (lub dopasowania), niezależnie od tego, czy określony artefakt został określony, czy nie. W zadaniu Pobierz artefakt 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.

Często zadawane pytania

Pyt.: Co to są artefakty kompilacji?

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

Pyt.: Czy obsługujesz publikowanie artefaktów w folderze udostępnionym?

1: Nie obecnie, ale ta funkcja jest planowana.

Pyt.: Czy mogę usunąć artefakty potoku podczas ponownego uruchamiania 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 dołączyć identyfikator zadania w nazwie artefaktu. $(system.JobId) jest odpowiednią zmienną do tego celu. Zobacz Zmienne systemowe , aby dowiedzieć się więcej o wstępnie zdefiniowanych zmiennych.