Как исключить некоторые каталоги и файлы из разделения в задаче Удалить файлы - PullRequest
0 голосов
/ 05 марта 2020

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

Внутренняя структура моего $(Build.ArtifactStagingDirectory):

a
|--Client
|       |--ImportantFolder
|       |                |--FileNumber1
|       |                |--....(Many other files here)
|       |                |--FileNumberN
|       |--OtherJunkFolder
|       |--OtherFile
|--JunkFolder

Итак, папка a имеет две подпапки (Client и JunkFolder), папка Client имеет одну папку с именем ImportantFolder, одну папку с именем OtherJunkFolder и один файл с именем OtherFile. ImportantFolder содержит множество файлов с разными именами и расширениями.

Как удалить все папки и файлы из папки a, за исключением папок Client/ImportantFolders? Другими словами: я хочу сделать что-то вроде этого:

**
!Client/ImportantFolder/**

Но этот шаблон удаляет все из папки a. Я также пытался

**
!(Client/**)

и просто

**
!(Client)

Оба не работали.

Ответы [ 2 ]

1 голос
/ 06 марта 2020

После тестирования шаблон !(Client) работает. Но он также сохраняет OtherJunkFolder и OtherFile в папке Client.

Pattern !(Client/ImportantFolder) не работает.

В качестве обходного пути вы можете использовать задачу сценария для удаления всех папок и файлов из папки, кроме папок в папках Client / ImportantFolders. Пожалуйста, проверьте ниже сценарий powershell в задаче powershell.

Get-ChildItem "$(build.artifactstagingdirectory)" | where { $_.Name -inotmatch "Client" } | Remove-Item -Recurse
Get-ChildItem "$(build.artifactstagingdirectory)/Client" | where { $_.Name -inotmatch "ImportantFolder" } | Remove-Item -Recurse

Другой возможный обходной путь - использование задачи копирования файла для копирования папки Client/ImportantFolder в новую папку. Например, папка Client/ImportantFolder будет скопирована в новую папку $(Agent.BuildDirectory)/a1. А затем укажите следующие задачи в этой новой папке.

enter image description here

Если вы хотите включить в свои артефакты только папку Client/ImportantFolder для публикации в следующая публикация sh задача сборки артефактов. Самый простой способ - указать Path to publish на папку Client/ImportantFolder. Тогда у опубликованных артефактов будет только папка Client/ImportantFolder. Проверьте ниже пример:

enter image description here

1 голос
/ 05 марта 2020

Попробуйте без ** и только с !(Client), удалит JunkFolder кроме папки Client.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...