Публикация и скачивание артефактов конвейера

Azure DevOps Services

С помощью Azure Pipelines можно скачать артефакты из предыдущих этапов конвейера или из другого конвейера. Вы также можете опубликовать артефакт в общей папке или сделать его доступным в качестве артефакта конвейера.

Публикация артефактов

Вы можете опубликовать артефакты с помощью YAML, классического редактора или Azure CLI:

Примечание

Публикация артефактов конвейера не поддерживается в конвейерах выпуска.

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

Примечание

Ключевое publish слово является ярлыком для задачи "Опубликовать артефакт конвейера ".

Хотя имя артефакта является необязательным, рекомендуется указать имя, точно отражающее содержимое артефакта. Если вы планируете использовать артефакт из задания, работающего в другой ОС, необходимо убедиться, что все пути к файлам допустимы для целевой среды. Например, имя файла, содержащее символ \ , или * не удастся скачать в Windows.

Требуется указать путь к файлу или папке, которые требуется опубликовать. Это может быть абсолютный или относительный путь к $(System.DefaultWorkingDirectory).

Пакеты в Azure Artifacts являются неизменяемыми. После публикации пакета его версия будет зарезервирована без возможности восстановления. Повторный запуск неудачных заданий завершится ошибкой, если пакет был опубликован. Хороший способ сделать это, если вы хотите иметь возможность повторно запускать неудачные задания, не сталкиваясь с уже имеющимся пакетом ошибок, заключается в использовании Условий , чтобы выполняться только в том случае, если предыдущее задание выполнено успешно.

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

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

Примечание

Плата за хранение артефактов конвейера не взимается. Кэширование конвейера также исключается из выставления счетов за хранилище. См . сведения о том, какие артефакты учитываются в общем объеме оплачиваемого хранилища.

Внимание!

Удаление выполнения конвейера приведет к удалению всех артефактов, связанных с этим запуском.

Использование artifactignore

.artifactignore использует синтаксис , аналогичный .gitignore (с небольшими ограничениями), чтобы указать, какие файлы следует игнорировать при публикации артефактов. Дополнительные сведения см . в статье Использование файла ARTIFACTIGNORE .

Примечание

Знак + "плюс" не поддерживается в URL-путях, и некоторые сборки метаданных для типов пакетов, таких как Maven.

Пример. Игнорируйте все файлы, кроме .exe файлов:

**/*
!*.exe

Важно!

Azure Artifacts автоматически игнорирует путь к папке GIT , если у вас нет файла .artifactignore . Это можно обойти, создав пустой файл ARTIFACTIGNORE .

Скачивание артефактов

Артефакты можно скачать с помощью YAML, классического редактора или Azure CLI.

steps:
- download: current
  artifact: WebApp
  • current: скачивание артефактов, созданных текущим запуском конвейера. Параметры: текущий, конкретный.

Примечание

Список опубликованных артефактов будет доступен только в следующих зависимых заданиях. Поэтому используйте current параметр только в отдельных заданиях, которые зависят от заданий с задачами публикации артефактов.

Совет

Ресурсы конвейера можно использовать для определения источника в одном месте и его использования в любом месте конвейера.

Примечание

Ключевое download слово является ярлыком для задачи "Скачать артефакт конвейера ".

По умолчанию файлы скачиваются в $(Pipeline.Workspace). Если имя артефакта не указано, будет создан подкаталог для каждого скачаемого артефакта. Вы можете использовать шаблоны сопоставления, чтобы ограничить скачиваемые файлы. Дополнительные сведения см. в статье Шаблоны сопоставления файлов .

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

Выбор артефактов

Один шаг загрузки может скачать один или несколько артефактов. Чтобы скачать несколько артефактов, оставьте поле имя артефакта пустым и используйте шаблоны сопоставления файлов, чтобы ограничить количество скачиваемых файлов. ** — это шаблон сопоставления файлов по умолчанию (все файлы во всех артефактах).

Один артефакт

При указании имени артефакта:

  1. Скачиваются только файлы для этого конкретного артефакта. Если артефакт не существует, задача завершится сбоем.

  2. Шаблоны сопоставления файлов оцениваются относительно корня артефакта. Например, шаблон *.jar соответствует всем файлам с расширением .jar в корне артефакта.

В следующем примере показано, как скачать все *.js данные из артефакта WebApp:

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

Несколько артефактов

Если имя артефакта не указано:

  1. Можно скачать несколько артефактов, и задача не завершается ошибкой, если файлы не найдены.

  2. Для каждого артефакта создается подкаталог.

  3. Шаблоны сопоставления файлов должны предполагать, что первый сегмент шаблона является (или соответствует) имени артефакта. Например, WebApp/** соответствует всем файлам из артефакта WebApp . Шаблон */*.dll соответствует всем файлам с расширением .dll в корне каждого артефакта.

В следующем примере показано, как скачать все .zip файлы из всех артефактов:

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

Артефакты в заданиях выпуска и развертывания

Артефакты скачиваются автоматически только в заданиях развертывания. По умолчанию артефакты скачиваются в $(Pipeline.Workspace). Задача скачивания артефакта будет автоматически внедрена только при использовании обработчика deploy жизненного цикла в развертывании. Чтобы предотвратить автоматическую download загрузку артефактов, добавьте шаг и присвойте ей значение none. В обычном задании сборки необходимо явно использовать ключевое download слово step или задачу Download Pipeline Artifact (Скачать артефакт конвейера ). Дополнительные сведения о других типах перехватчиков см. в разделе Обработчики жизненного цикла .

steps:
- download: none

Использование артефактов на разных этапах

Если вы хотите иметь доступ к артефакту на разных этапах конвейера, вы можете опубликовать артефакт на одном этапе, а затем скачать его на следующем этапе, используя зависимости. Дополнительные сведения см. в разделе Этапы и этапы зависимостей .

Пример

В следующем примере мы скопируем и опубликуем папку скрипта из репозитория в $(Build.ArtifactStagingDirectory). На втором этапе мы загрузим и запустим скрипт.

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'

Снимок экрана: выходные данные задачи PowerShell

Миграция из артефактов сборки

Артефакты конвейера — это следующее поколение артефактов сборки и рекомендуемый способ работы с артефактами. Артефакты, опубликованные с помощью задачи Публикация артефактов сборки , по-прежнему можно скачать с помощью скачивания артефактов сборки, но мы рекомендуем использовать последнюю задачу "Скачать артефакт конвейера ".

При миграции с артефактов сборки на артефакты конвейера:

  1. По умолчанию задача "Скачать артефакт конвейера" скачивает файлы в $(Pipeline.Workspace). Это рекомендуемый путь по умолчанию для всех типов артефактов.

  2. Шаблоны сопоставления файлов для задачи Загрузки артефактов сборки должны начинаться с имени артефакта (или совпадать с ним), независимо от того, был ли указан определенный артефакт. В задаче Скачивание артефакта конвейера шаблоны не должны включать имя артефакта, если имя артефакта уже указано. Дополнительные сведения см. в разделе Выбор одного артефакта.

Пример

- task: PublishPipelineArtifact@1
  displayName: 'Publish'
  inputs:
    targetPath: $(Build.ArtifactStagingDirectory)/**
    ${{ if eq(variables['Build.SourceBranchName'], 'main') }}:
        artifactName: 'prod'
    ${{ else }}:
        artifactName: 'dev'
    artifactType: 'pipeline'
  • targetPath: путь к файлу или каталогу для публикации. Может быть абсолютным или относительно рабочего каталога по умолчанию. Может включать переменные, но подстановочные знаки не поддерживаются.

  • artifactName: имя публикуемого артефакта. Если значение не задано, по умолчанию используется уникальный идентификатор, ограниченный заданием.

  • artifactType. Выберите, следует ли сохранить артефакт в Azure Pipelines или скопировать его в общую папку, доступ к которому должен быть доступен из агента конвейера. Параметры: pipeline, filepath.

часто задаваемые вопросы

Вопрос. Что такое артефакты сборки?

О. Артефакты сборки — это файлы, созданные сборкой. Дополнительные сведения о публикации и использовании артефактов сборки см. в статье Build Artifacts (Артефакты сборки).

Вопрос. Поддерживается ли публикация артефактов в общей папке?

О. В настоящее время нет, но эта функция планируется.

Вопрос. Можно ли удалять артефакты конвейера при повторном выполнении неудачных заданий?

О. Артефакты конвейера не могут быть удалены или перезаписаны. Если вы хотите повторно создать артефакты при повторном запуске неудачного задания, можно включить идентификатор задания в имя артефакта. $(system.JobId) — это соответствующая переменная для этой цели. Дополнительные сведения о предопределенных переменных см. в разделе Системные переменные.

Вопрос. Как получить доступ к веб-каналам Артефактов за брандмауэром?

Ответ. Если ваша организация использует брандмауэр или прокси-сервер, убедитесь, что разрешены URL-адреса и IP-адреса домена Azure Artifacts.