#visual-studio #nuget #rake #rake-task #build-server
#visual-studio #nuget #rake #rake-задача #сборка-сервер
Вопрос:
Мы используем rake для сборки и тестирования на наших компьютерах разработчиков. Недавно мы перенесли один из наших проектов на наш собственный локальный сервер NuGet. Раньше мы использовали этот проект как подмодуль, и, таким образом, у него был постоянный путь к некоторому контенту (файлы лицензий, библиотеки для развертывания и т.д.). Я поиграл с тем, как создается пакет NuGet, и подумал, что разобрался с этим, поместив это содержимое как «content» в пакет NuGet. Проблема в том, что NuGet помещает только эти файлы при установке, и я не буду включать то, что добавляется NuGet. Итак, когда я запускаю свой код и использую наш сервер сборки, происходит сбой, потому что требуемые файлы содержимого никогда не восстанавливаются. Итак, я подумал поместить эти файлы в /package/ourproject.2016.10.20.16
папку. Проблема, которую я вижу, заключается в том, что если кто-то обновит пакет NuGet в проекте, ему также придется обновить файл rakefile. Чтобы указать на новую папку tools. К счастью, NuGet автоматически присваивает проекту имя пакета и номер версии, так что это соответствует в этом отношении. В качестве версии мы используем дату сборки и номер сборки yyyy.mm.dd.bb
.
это та часть файла rake, которая представляет интерес
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. (Я полагаю, это не самая серьезная проблема, и это единственный проект, который ссылается на этот пакет. но если бы был способ сделать ее более динамичной, используя подстановочные знаки или что-то еще, это было бы потрясающе. Есть идеи?
Ответ №1:
Я понял это! на самом деле это было довольно просто. Я использовал Dir.glob
(извините, если это нехорошо, но я не сторонник Ruby.
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. Я рад, что вы с этим разобрались. Пожалуйста, отметьте свой ответ, который будет полезен другим сообществам, у которых такая же проблема. Спасибо.