I currently setting up a continuous integration/deployment scenario for .Net projects. I'm currently using NuGet to manage my project's dependencies and also artifacts created during the build. Is it common practice for developers to store msi packages in NuGet Repository? I have not seen one example of it online. I don't think this technology was intended for hosting installers. Is there any other technology for maintaining a repository for installer versioning?
-
Is your project an msi installer or does it make use of msi installers? Nevermind, I re-read your post you are making use of nu-get packages that are contained in an installable package.Ross Bush– Ross Bush2014-04-04 16:11:52 +00:00Commented Apr 4, 2014 at 16:11
-
Are you using version control software? Do you have a dedicated build server with msbuild or ant? Are you using any ci management tools such as cruise control.net/team city/tfs?Ross Bush– Ross Bush2014-04-04 16:22:09 +00:00Commented Apr 4, 2014 at 16:22
-
I'm using NuGet/MSBuild/Wix/Jenkins/. Now I want to take the built msi artifact and store it in some management system so it can be retrieved for deployment or at a later date.MikeJPR– MikeJPR2014-04-04 16:40:07 +00:00Commented Apr 4, 2014 at 16:40
-
I guess this would be akin to having all binaries zipped after the build. However, you are taking it one step further and creating an installable image. Sounds like the msi is the endpoint for the CI cycle for a particular build. Would saving the post build msi to a directory named with the version be enough?Ross Bush– Ross Bush2014-04-04 16:45:56 +00:00Commented Apr 4, 2014 at 16:45
-
well its not only storing this to a directory, but making the versions available to the dev teams in the organization. This loads on a ton of scope creep publish/removal/view/find/search/security. I was hoping that there was a solution that would manage this functionality. Currently, the only solution I see would be pushing this MSI to nuget repo, which is outside convention.MikeJPR– MikeJPR2014-04-04 17:37:44 +00:00Commented Apr 4, 2014 at 17:37
1 Answer
Ran in to this situation as well, and few people actually understand the unique problems that are encountered building a CI Deployment pipeline.
From the perspective of installing system level software, on Microsoft Windows, in the enterprise environment.... MSIs really are the ideal choice, they protect the systems from horrific scripts, and provide a degree of reliability that is otherwise unavailable.
From the CI perspective however, MSIs don't have native integration in all the places you'd find NuGets. We use the "Octopus" style deployment, where you have a deployment packing inside a nuget, we call them "NuGetDeploy" packages.
WinRM to target box, nuget restore "NuGetDeploy" package, and do MSI installation.
Keep in mind, This is only the right choice for system level software, that cannot use something like webdeploy.