Как написать ZIP-задание Albacore, которая включает в себя только определенные папки и сами папки?

StackOverflow https://stackoverflow.com/questions/3151887

  •  01-10-2019
  •  | 
  •  

Вопрос

Я пытаюсь молнить артефакты граблей сборки, используя Albacore's ZIPTARK.. Отказ Решение, которое я строит, имеет три проекта, которые имеют артефакты, которые должны быть застегнуты по отдельности, но здесь упомянуто только проект ASP.NET MVC. Вот структуру каталогов решения:

rakefile.rb
solution.sln
src/
    (other projects that are not relevant)
    website/
        (various folders I don't want included in the artifacts)
        bin/
        Content/
        Scripts/
        Views/
        Default.aspx
        Global.asax
        web.config

Сначала я написал эту задачу:

website_directory = File.join '.', 'src', 'website'
website_project_name = 'website'

zip :zip => [ :run_unit_tests, :less ] do |zip|
  zip.directories_to_zip = [ 'bin', 'Content', 'Scripts', 'Views' ].map{ |folder| File.join website_directory, folder }
  zip.additional_files = [ 'Default.aspx', 'favicon.ico', 'Global.asax', 'web.config'].map{ |file| File.join website_directory, file }
  zip.output_file = get_output_file_name
  zip.output_path = get_artifacts_output_path website_project_name
end

Проблема в том, что вывод этой задачи представляет собой ZIP-файл, содержащий содержание Из этих папок, а не сами папки, которые явно нежелательны.

Далее я пытался перевернуть flatten_zip поле для false (что не документированное поле, но вы можете найти его в источник). Это произвело ZIP, содержащее вышеуказанные папки, но внизу всего ./src/website/ Иерархия папки. Я хочу приведенные выше папки в корне ZIP, так что это тоже не работает.

Так что мой следующий выстрел был это, используя exclusions, который также не документирован:

zip :zip => [ :run_unit_tests, :less ] do |zip|
  zip.directories_to_zip website_directory
  zip.exclusions = [ /.git/, /.+\.cs/, /App_Data/, /Attributes/, /AutoMapper/, /Controllers/, /Diagrams/, /Extensions/, /Filters/, /Helpers/, /Models/, /obj/, /Properties/, /StructureMap/, /Templates/, /CompTracker.Web.csproj/, /Default.aspx.cs/, /Global.asax.cs/, /Publish.xml/, /pdb/ ]
  zip.output_file = get_output_file_name
  zip.output_path = get_artifacts_output_path website_project_name
end

Это работало для меня, но когда я недавно добавил /AutoMapper/ а также /StructureMap/ к тому exclusions Массив, он также вызвал automaPper.dll и structuremap.dll (конечно) также исключается из папки Bin.

Как я должен редактировать любую из вышеперечисленных задач, чтобы иметь только папки и файлы, которые я хочу в корне моей ZIP?

Это было полезно?

Решение

Вы можете скопировать все файлы и папки, которые вам нужны в каталоге Temp, а затем Zip это вверх. Другими словами, установите недвижимость directories_to_zip в одну папку, которая имеет все правильные файлы, уже скопированные - где Копирование кода это то, что делает все фильтрации для вас. Я думаю, что это неуказанное ожидаемое использование (и так, как я его пользуюсь). Я просто контраструю две идеи, чтобы понять.

Стратегия A: Скопируйте структуру папки

Скопируйте то, что вам нужно в каталог Temp. Таким образом, вы устанавливаете свойство «Directories_to_zip» в одну папку, например:

directories_to_zip = 'ziptemp/all.my.stuff.copied.here/'

Стратегия B: используйте фильтр

(Это ваша текущая стратегия)

Использовать directories_to_zip Свойство в качестве фильтра в оригинальном каталоге (это массив, который принимает несколько каталогов, поэтому вы не можете быть обвинены в том, что он должен был работать таким образом). Затем вы используете различные свойства для фильтрации файлов / папок, которые вам нужны.

Возможная резолюция

Чтобы решить вашу проблему, то вы могли бы принять стратегию А. На самом деле, если нет никаких необычайных проблем с этим (медленный ПК, удивительно низкий на дисковом пространстве), я бы подумал, что это будет немного более надежный способ идти по этому поводу, потому что Вы можете быть уверены, что то, что вы Zipping, это именно то, что вы копируете, что можно проверить, проверив каталог Ziptemp.

Кстати, я могу быть уверен, что стратегия работает, потому что я использую его (с помощью Albacore) для zip-файлов для наших установщиков.

Другие советы

У меня была такая же проблема, используя «Albacore», я хотел Zip папку под названием «Инструменты» (не только содержимое), хранит ее в папке, называемую «OUT» и назвать Zip 'Tools.zip ... так что вместо использовал это;

require 'zip/zipfilesystem'

Zip::ZipFile::open("out/tools.zip", Zip::ZipFile::CREATE) { |z|
    Dir['{tools}/**/*'].each { |f|
        z.add(f, f)
    }
}

Я знаю, но я надеюсь, что это поможет кому-то.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top