2016-10-21 5 views
0

Мы используем грабли для сборки и тестирования на наших машинах dev. Недавно мы перенесли один из наших проектов на наш собственный локальный сервер NuGet. Мы использовали этот проект в качестве подмодуля и, следовательно, имели постоянный путь к некоторому содержанию (файлы лицензий, библиотеки для развертывания и т. Д.). Я играю с тем, как создается пакет NuGet, и я подумал, что я его понял, поставив этот контент как «контент» в пакете NuGet. Проблема в том, что NuGet ставит эти файлы только при установке, и я не буду включать вещи, которые добавляются NuGet. Поэтому, когда я нажимаю свой код и использую наш сервер сборки, он терпит неудачу, потому что необходимые файлы содержимого никогда не восстанавливаются. Поэтому я решил разместить эти файлы в папку /package/ourproject.2016.10.20.16. Точка боли, которую я вижу, это то, что если кто-то обновит пакет NuGet в проекте, они также должны будут обновить файл рейка. Чтобы указать на новую папку инструментов. К счастью, NuGet автоматически объявляет проект по названию пакета и номеру версии, поэтому он является последовательным в этом отношении. Мы используем дату сборки и номер сборки как версию yyyy.mm.dd.bb.Получить динамическую папку из пакета nuget

это часть файла граблями в интересах

task :copy_to_deployment_folder do 
    copy_hash = { 
     "." => ["#{solutionName}.Deployment/Scripts/DevDeploy.bat", 
       "#{solutionName}.Deployment/Scripts/QaDeploy.bat", 
       "#{solutionName}.Deployment/Scripts/PreProdDeploy.bat", 
       "#{solutionName}.Deployment/Scripts/ProdDeploy.bat", 
       ], 
     "Applications/#{solutionName}" => "#{solutionName}/bin/{configuration}", 
     "deploy" => ["#{solutionName}.Deployment/deploy_bin", 
         "#{solutionName}.Deployment/bin/{configuration}"], 
     "deploy/settings" => "#{solutionName}.Deployment/settings", 
     "deploy/Licenses" => "packages/ourproject.2016.10.20.20/tools/Licenses" 
    } 

    BuildController.copy_to_deployment_folder copy_hash 
end 

конкретно последний элемент в copy_hash нужно будет меняться каждый раз, когда проект был обновлен в NuGet. (Я полагаю, что это не худшая проблема, и это единственный проект, который ссылается на этот пакет, но если бы был способ сделать его более динамичным, используя дикие карты или что-то, что было бы потрясающе. Любые идеи?

ответ

0

Я понял это! это было довольно просто на самом деле. Я использовал Dir.glob (извините, если это не хорошо, но я не рубин человек.

task :copy_to_deployment_folder do 
    packagePath = Dir.glob("packages/ourproject.*")[0] 
    copy_hash = { 
     "." => ["#{packagePath}/content/Scripts/DevDeploy.bat", 
       "#{packagePath}/content/Scripts/QaDeploy.bat", 
       "#{packagePath}/content/Scripts/PreProdDeploy.bat", 
       "#{packagePath}/content/Scripts/ProdDeploy.bat", 
       ], 
     "Applications/#{solutionName}" => "#{solutionName}/bin/{configuration}", 
     "deploy" => ["#{packagePath}/content/deploy_bin", 
         "#{solutionName}.Deployment/bin/{configuration}"], 
     "deploy/settings" => "#{solutionName}.Deployment/settings", 
     "deploy/Licenses" => "#{packagePath}/content/Licenses" 
    } 

    BuildController.copy_to_deployment_folder copy_hash 
end 
+1

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

Смежные вопросы