20111010 agile minds - organize your chickens - nuget for the enterprise
1. NuGet for the Enterprise
ORGANIZE YOUR CHICKENS
FEBRUARY 12, 2012 | SLIDE 1
2. WHO ARE WE?
Maarten Balliauw
Antwerp, Belgium
www.realdolmen.com
Focus on web
ASP.NET, ASP.NET MVC, PHP, Azure, …
MVP Windows Azure (formerly ASP.NET)
http://blog.maartenballiauw.be
@maartenballiauw
FEBRUARY 12, 2012 | SLIDE 2
3. WHO ARE WE?
Xavier Decoster
Antwerp, Belgium
www.realdolmen.com
Focus on web/ALM
Visual Studio, TFS, Scrum, ...
Silverlight, ASP.NET, ASP.NET MVC, …
http://www.xavierdecoster.com
@xavierdecoster
FEBRUARY 12, 2012 | SLIDE 3
4. AGENDA
Chickens?
NuGet
Scenarios
Host your own NuGet repository
Continuous (Package) Integration
(Ab)using NuGet
Conclusion
FEBRUARY 12, 2012 | SLIDE 4
5. Dependency Hell
WELCOME TO DLL HELL
FEBRUARY 12, 2012 | SLIDE 5
6. 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.”
Source: Wikipedia
FEBRUARY 12, 2012 | SLIDE 6
7. 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 does the 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 ?
FEBRUARY 12, 2012 | SLIDE 7
8. Using NuGet
PACKAGE MANAGEMENT
FEBRUARY 12, 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.”
FEBRUARY 12, 2012 | SLIDE 9
10. PACKAGE WHAT?
Package Management
“…a collection of software tools to automate the process of
installing, upgrading, configuring, and removing software
packages…”
Source: Wikipedia
Simple concept
Find Packages
(Re)Use Packages
Produce Packages
FEBRUARY 12, 2012 | SLIDE 10
11. GETTING STARTED
Tooling:
NuGet Package Manager (http://nuget.org)
NuGet Package Explorer (http://npe.codeplex.com)
Install-Package NuGetPowerTools
Install-Package NuGet.CommandLine
Guidance and documentation
http://docs.nuget.org
FEBRUARY 12, 2012 | SLIDE 11
19. 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
FEBRUARY 12, 2012 | SLIDE 19
20. ADVANCED USAGE SCENARIOS
Host your own NuGet repository
Continuous (Package) Integration
(Ab)using NuGet
FEBRUARY 12, 2012 | SLIDE 20
21. Those chickens are mine!
HOSTING YOUR OWN
REPOSITORY
FEBRUARY 12, 2012 | SLIDE 21
22. 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
FEBRUARY 12, 2012 | SLIDE 22
25. 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
FEBRUARY 12, 2012 | SLIDE 25
26. MEET MYGET
www.myget.org
NaaS
Register and off you go! (no dev)
Supports Enterprise scenarios
Granular security
Package mirroring
FEBRUARY 12, 2012 | SLIDE 26
27. Log in to www.myget.org and get started
MYGET DEMO
FEBRUARY 12, 2012 | SLIDE 27
28. Fetch the chickens when you need them
CONTINUOUS (PACKAGE)
INTEGRATION
FEBRUARY 12, 2012 | SLIDE 28
29. 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
FEBRUARY 12, 2012 | SLIDE 29
30. 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.
FEBRUARY 12, 2012 | SLIDE 30
31. 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!
FEBRUARY 12, 2012 | SLIDE 31
32. Organize your build chickens!
NUGETPOWERTOOLS DEMO
FEBRUARY 12, 2012 | SLIDE 32
33. 3RD PARTIES DON’T BELONG IN YOUR SCM
Source control bloated with third-party binaries?
Replace them with NuGet packages
Commit packages.config/repositories.config files
Preferably not the packages
Use NuGetPowerTools
Enable-PackageRestore
FEBRUARY 12, 2012 | SLIDE 33
34. 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 third-party packages
Internal NuGet.Server
Network Share
Or use MyGet for that
FEBRUARY 12, 2012 | SLIDE 34
35. 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
FEBRUARY 12, 2012 | SLIDE 35
37. 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
FEBRUARY 12, 2012 | SLIDE 37
38. 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!
FEBRUARY 12, 2012 | SLIDE 38
48. ORCHARD / WEBMATRIX / …
NuGet not bound to VS
Orchard CMS: modules & themes
WebMatrix: install page helpers on the fly
Your app: offer plugins through a repo
FEBRUARY 12, 2012 | SLIDE 48
50. Conclusion
• Dependencies & people are chickens
Deal with them! NuGet can help
• Set up your own NuGet repository for various
reasons
• Continuous package integration
• NuGet is a package manager
NuGet is a protocol
www.visug.be
51. http://blog.maartenballiauw.be
@maartenballiauw
http://www.xavierdecoster.com
@xavierdecoster
Any questions?
THANK YOU!
FEBRUARY 12, 2012 | SLIDE 51
Notes de l'éditeur
Maarten
Maarten
Xavier
Xavier
Xavier
XavierMaarten
Maarten
NuGet Install-PackageWhen you use NuGet to install a package, it copies the library files to your solution and automatically updates your project (add references, change config files, etc). NuGet Uninstall-PackageIf you remove a package, NuGet reverses whatever changes it made so that no clutter is left.
Xavier: Terugverwijzen naar “Marketing versioning”
Xavier
Maarten
Maarten
Maarten
XavierStart with empty MVC template + addNuGet.ServerpkgRun siteDrop pkgs in packages folderRefresh browserFeed toevoegen in VS & show pkgs
Xavier
Maarten
MaartenInloggen 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
Xavier
Xavier
Xavier
Maarten
Maarten
Xavier- Het feit dat NuGet.org geen garanties biedt op content- Wat als mensen packages verwijderen? BUILD breaks, DEVS unhappy again
Maarten -> Xavier
Xavier
Xavier
Xavier
Maarten
Maarten
TODO Scaffolding? Toevoegen van functies?Eventueel de NuGet.exe plugins ook nog tonen?