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

Azure DevOps Services

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

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

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

Примечание.

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

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

Примечание.

Ключевое слово publish — это ярлык для задачи "Публикация артефакта конвейера".

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

Путь к файлу или папке, необходимой для публикации. Это может быть абсолютный или относительный путь.$(System.DefaultWorkingDirectory)

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

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

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

Примечание.

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

Внимание

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

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

.artifactignore использует аналогичный синтаксис .gitignore (с небольшими ограничениями), чтобы указать, какие файлы следует игнорировать при публикации артефактов. Убедитесь, что файл artifactignore находится в каталоге, указанном в аргументе targetPath задачи Publish Pipeline Artifacts.

Примечание.

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

Пример: игнорировать все файлы, кроме EXE-файлов :

**/*
!*.exe

Важно!

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

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

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

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

Примечание.

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

Совет

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

Примечание.

Ключевое слово download загружает артефакты. Дополнительные сведения см. в разделе steps.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 шаг ключевое слово или задачу "Скачать артефакт конвейера". Дополнительные сведения о других типах крючков жизненного цикла см . в разделе "Перехватчики жизненного цикла".

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'

Screenshot showing the PowerShell task output

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

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

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

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

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

Пример

- 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: (обязательно) Путь к файлу или каталогу для публикации. Может быть абсолютным или относительным к рабочему каталогу по умолчанию. Может включать переменные, но дикие карта не поддерживаются. По умолчанию: $(Pipeline.Workspace).

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

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

Вопросы и ответы

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

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

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

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

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

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