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

Azure Pipelines

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

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

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

Примечание

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

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

Примечание

publishКлючевое слово является ярлыком для publish .

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

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

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

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

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

Примечание

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

Внимание!

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

Использование. артифактигноре

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

Пример. игнорирование всех файлов, кроме файлов .exe :

**/*
!*.exe

Примечание

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

Скачать артефакты

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

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

Совет

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

Примечание

downloadКлючевое слово является ярлыком для задачи « download ».

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

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

выбор Artifacts

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

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

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

  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'

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

Artifacts загружаются автоматически в заданиях развертывания. Задача "скачать артефакт" будет использоваться для автоматического добавления только при использовании deploy обработчика жизненного цикла в развертывании. Чтобы предотвратить автоматическую загрузку артефактов, добавьте download шаг и присвойте ему значение None. В регулярном задании сборки необходимо явно использовать download ключевое слово Step или задачу " download ". Дополнительные сведения о других типах обработчиков см. в разделе перехватчики жизненного цикла .

steps:
- download: none

Примечание

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

использование Artifacts на этапах

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

trigger: none
pool:
  vmImage: 'ubuntu-latest'
stages:
- stage: A
  jobs:
  - job: A1
    steps:
     - script: echo ##vso[task.setvariable variable=shouldrun;isOutput=true]true
       name: printvar
- stage: B
  dependsOn: A
  jobs:
  - job: B1
    condition: in(stageDependencies.A.A1.result, 'Succeeded', 'SucceededWithIssues', 'Skipped')
    steps:
    - script: echo hello from Job B1
  - job: B2
    condition: eq(stageDependencies.A.A1.outputs['printvar.shouldrun'], 'true')
    steps:
     - script: echo hello from Job B2

Пример

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

Снимок экрана, показывающий выходные данные задачи PowerShell

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'

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

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

При переходе от артефактов сборки к артефактам конвейера:

  1. для артефактов сборки обычно копируются файлы в $(Build.ArtifactStagingDirectory) , а затем для публикации этой папки используется задача « $(Build.ArtifactStagingDirectory) ». Задача « Публикация конвейера публикации » позволяет просто публиковать непосредственно из пути, содержащего файлы.

  2. По умолчанию задача " Загрузка артефакта конвейера " загружает файлы в . Это Стандартный и рекомендуемый путь для всех типов артефактов.

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

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

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

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

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

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