4. Who am I?
Maarten Balliauw
Antwerp, Belgium
www.realdolmen.com
Focus on web
ASP.NET MVC, Windows Azure, SignalR, ...
MVP Windows Azure & ASPInsider
http://blog.maartenballiauw.be
@maartenballiauw
Author: Pro NuGet - http://amzn.to/pronuget
APRIL 16, 2012 | SLIDE 4
7. 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)
APRIL 16, 2012 | SLIDE 7
8. Cause and Effect
Reinventing the wheel
We don’t need that dependency
“If they can do it, we can do it, but better”
What happened to reuse of components?
Marketing-Driven Versioning
People are waiting for v2 to buy
Let’s call it v4 Platform Update SP3 November Edition
KB2348063 RTW Refresh
We lost ownership of AssemblyVersion ?
APRIL 16, 2012 | SLIDE 8
9. 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
APRIL 16, 2012 | SLIDE 9
10. Demo
Finding & consuming a NuGet package
APRIL 16, 2012 | SLIDE 10
11. Demo
Creating & publishing a NuGet package
APRIL 16, 2012 | SLIDE 11
12. 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
APRIL 16, 2012 | SLIDE 12
14. 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
APRIL 16, 2012 | SLIDE 14
17. 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
APRIL 16, 2012 | SLIDE 17
18. Meet MyGet
www.myget.org
NaaS
Register and off you go!
Supports Enterprise scenarios
Granular security
Package mirroring
Proxying
APRIL 16, 2012 | SLIDE 18
21. 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
APRIL 16, 2012 | SLIDE 21
22. 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.
APRIL 16, 2012 | SLIDE 22
23. Continuous Package Integration
Can I get rid of all these referenced assemblies
duplicated all-over my source control system?
Yes!
Do I need to install and maintain NuGet on all
my build agents?
No!
APRIL 16, 2012 | SLIDE 23
24. Demo
Package Restore
APRIL 16, 2012 | SLIDE 24
25. 3rd parties don’t belong in your
VCS
Replace them with NuGet packages
Do commit packagesrepositories.config
file
Use Enable-PackageRestore
APRIL 16, 2012 | SLIDE 25
26. Problem!
NuGet feed is subject to change...
PackageSource msbuild property to the rescue
(NuGet.settings.targets in $(SolutionDir).nuget folder)
Now what...
Host your own feed and mirror packages
Or use MyGet for that
APRIL 16, 2012 | SLIDE 26
27. 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
APRIL 16, 2012 | SLIDE 27
28. 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
APRIL 16, 2012 | SLIDE 28
29. Guidance
Package Integration ≠ Integration Testing
CI builds reflect output of source control input
Same input always produces same output
Do not auto-update packages
during automated builds
APRIL 16, 2012 | SLIDE 29
37. Build
Test
Package
Push
Release / Publish
Deploy
Demo
Continuous Delivery
APRIL 16, 2012 | SLIDE 37
38. 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
APRIL 16, 2012 | SLIDE 38
39. http://blog.maartenballiauw.be
@maartenballiauw
http://amzn.to/pronuget
or Install-Package ProNuGet
THANK YOU!
APRIL 16, 2012 | SLIDE 39
Editor's Notes
Maarten
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 van NuGet 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