Managing software dependencies, whether those created in-house or from third parties can be a pain in the behind. Whether dependencies feel like wild chickens or people run around like chickens dealing with dependencies, the NuGet package manager can be a cure. Let me guide you to creating enterprise (chicken) NuGets and dealing with them in a structured, easy-to-maintain manner. From developer workstation to build server, NuGet tastes great! This session will provide you the dip sauce.
5. Welcome to Dependency Hell
“A term for the frustration of software users who have installed
software packages which have dependencies on specific
versions of other software packages.” (Wikipedia)
6. Cause and Effect
› Reinventing the wheel
We don’t need that dependency
“If they can do it, we can do it, but better”
› Marketing-Driven Versioning
People are waiting for v2 to buy
Let’s call it v4 Platform Update SP3 November Edition
KB2348063 RTW Refresh
7. Package Management
› NuGet to the Rescue!
“NuGet is a Visual Studio extension that makes it easy to install
and update open source libraries and tools in Visual Studio.”
› Simple concept
Find Packages
{Re}Use Packages
Produce Packages
8. Semantic Versioning
› Think about your versioning! {semver.org}
Major Breaking changes
Minor Backwards compatible API
additions/changes
Patch Bugfixes not affecting the API
Always specify lowerbound
Use a version range {lowerbound + upperbound}
when versioning of package you depend on is messed
up
9. Advanced usage scenarios
› Host your own NuGet repository
› Continuous {Package} Integration
› {Ab}using NuGet
11. Hosting your own repository
› NuGet = public feed
Privacy
Intellectual property
› NuGet maintained by package authors
Author removes v1.0.45 and you depend on it
14. NuGet.Server limitations
› Only 1 feed per installation
› No UI
up to you to build it
› No granular security
only 1 API-key for entire feed
› Conclusion: requires you to develop if you want
something more useful
15. Meet MyGet
› www.myget.org
› NaaS
Register and off you go!
› Supports Enterprise scenarios
Granular security
Package mirroring
16. // Sign in to myget.org and get started
MyGet Demo
17. // To chicken, or not to check-in
Continuous {Package} Integration
18. Typical source control...
› Contains /References {if you are lucky}
...and also
Project/_bin_deployable_assemblies
...and also /References/old
...and also /..././../.././References
› Usually references GAC-ed assemblies
19. Dependencies
› Software has dependencies. Deal with it.
› But are those YOUR intellectual property?
YOUR reason to build software?
YOUR product?
› No. They are dependencies. And they don’t belong
in source control.
20. Continuous {Package} Integration
› Can I get rid of all these referenced assemblies
duplicated all-over my source control system?
› Do I need to install and maintain NuGet on all my build
agents?
22. 3rd parties don’t belong in your VCS
› Replace them with NuGet packages
› Do commit
packagesrepositories.config file
› Use Enable-PackageRestore
› Set package-source location(s)
(NuGet.settings.targets in $(SolutionDir).nuget folder)
23. Problem!
› NuGet feed is subject to change...
PackageSource msbuild property to the rescue
› Now what...
Host your own feed and mirror packages
Or use MyGet for that
24. Organize your chickens
› Feed structuring
Scoped by quality: Build, QA, Production, …
Scoped by audience: public, restricted access
Other:
Scoped by product version, milestone…
Scoped by target platform
26. Guidance
› Publishing a package brings great responsibility
Breaking changes in your packages should be
versioned accordingly!
Consumers might choose to no longer consume any
packages you published
27. Guidance
› Package Integration ≠ Integration Testing
CI builds reflect output of source control input
Same input always produces same output
28. The Male Optical Illusion
Stare at this picture. After about 30 seconds you should
begin to see a Boat appear in the background. Amazing!
*** Some men report it takes them several minutes to see the boat, so be patient and really focus!!! ***
29. {Ab}using NuGet?
› Change of perspective
NuGet is a package
manager
NuGet is a protocol for
distributing packages
31. Automate deployments
› Build results in .nupkg
› Octopus deploys to its tentacles
Test tentacles
Staging tentacles
Production tentacles
› www.octopusdeploy.com
32.
33. Chocolatey
› NuGet
developer library packages
› Chocolatey
applications and tools packager
“yum” or “apt-get” for Windows
› www.chocolatey.org
35. NuGet Inception
Build DEMO
Test › Continuous Delivery
of the MyGet
Package
website using:
Push TeamCity
NuGet
Release / Publish
MyGet
Deploy Octopus
36. Conclusion
Dependencies & people are chickens
Deal with them! NuGet can help
Set up your own NuGet repository
Continuous package integration
NuGet is a package manager
NuGet is a protocol
37. http://www.xavierdecoster.com
@xavierdecoster
Stay for the price draw
for a chance to win a copy
// No chickens were hurt
// in the making of this presentation
Thank you!
Notes de l'éditeur
Xavier: Terugverwijzen naar “Marketing versioning”
Start with empty MVC template + addNuGet.ServerpkgRun siteDrop pkgs in packages folderRefresh browserFeed toevoegen in VS & show pkgs
Inloggen en feed aanmakenPackage pushen vanuit NPEFeed toevoegen aan VSOp MyGet feed security instellenPackage installen in VS en tonen dat er basic auth bijkomtPackage vanNuGet toevoegen op MyGet en tonen dat je alle dependencies kan meepakken, mirroring, … en dat je ook gewoon van uw packages.config kan toevoegen
- Het feit dat NuGet.org geen garanties biedt op content- Wat als mensen packages verwijderen? BUILD breaks, DEVS unhappy again
Now isnot the time to take a nap (NaaP) NuGet is more than a package (system), it’s a protocol to:Distributesfunctionality (automateanything!, cfrScaffolding!)Distribute websites (akadeployments!)Distribute software in general
TODO Scaffolding? Toevoegen van functies?Eventueel de NuGet.exe plugins ook nog tonen?