NuGet quickly became a very popular package management solution for .NET and has been around for some time now. The introduction of a central package repository and the integrated NuGet tooling suddenly made it a whole lot easier to improve certain ALM processes, proof of which can be found into the increasing rate at which many packages make it to the NuGet Gallery.
At the same time, most businesses are struggling how to take optimal benefit from this while trying to avoid a situation commonly known as “dependency hell”. In addition, most are not anticipating or designing for failure by depending directly, which became painfully clear during a recent downtime of the NuGet Gallery. This session will provide you with guidance on how you can use both NuGet and TFS11 to take your development environment to the next level.
2. WHO AM I?
Xavier Decoster
Antwerp, Belgium
www.realdolmen.com
Co-founder of MyGet.org
Focus on ALM/Web
http://www.xavierdecoster.com
@xavierdecoster
MAY 8, 2012 | SLIDE 3
3. AGENDA
Continuous Integration
Room for Improvement
Dealing with dependencies
Versioning
VCS issues
Debugging
Package Management
One step closer to Continuous Delivery?
1 + 1 = Optimize for Happiness
MAY 8, 2012 | SLIDE 4
4. Do you
speak it?
CONTINUOUS
INTEGRATION
MAY 8, 2012 | SLIDE 5
5. DISCLAIMER
Not saying “my way” must be “your way”
Non-optimal doesn’t mean wrong
Pointing out opportunities and alternatives
MAY 8, 2012 | SLIDE 6
6. CONTINUOUS INTEGRATION
Team members integrate their work frequently
Each integration is verified by an automated build
(including tests)
Goal:
Detect integration errors
As quickly as possible!
Why?
Reduce risks
Deployable software at any time
MAY 8, 2012 | SLIDE 7
7. (OFTEN) NON-OPTIMAL SETUP
Most commonly encountered
approach to CI
Developer
Automated Build triggered by VCS
VCS
All tests run every single time
Build
Eventually someone looks at the CI
Tests outcome
Feedback
MAY 8, 2012 | SLIDE 8
8. WHAT IF…
… compilation fails?
Changes already in VCS!
Developer
Entire team affected
VCS … a test fails?
Same story!
Build
… no one noticed the CI failed?
Kittens die!
Tests
Feedback
MAY 8, 2012 | SLIDE 9
9. OPTIMIZE FOR HAPPINESS
Integrate first!
Gated check-ins
Developer
Integration fails?
Build Changeset rejected
Tests Integration succeeds?
Changeset committed
Feedback
Every successful check-in is a reward for
good work.
VCS
MAY 8, 2012 | SLIDE 10
10. OPTIMIZE FOR QUALITY
Code Analysis
Developer
Build
Test Impact Analysis
Tests
Feedback
VCS
MAY 8, 2012 | SLIDE 11
11. TFS11 – CI IMPROVEMENTS
Build Triggers
MAY 8, 2012 | SLIDE 12
12. TFS11 – CI IMPROVEMENTS
Supporting multiple test frameworks
MSTest (built-in)
xUnit (http://aka.ms/xunit-vs11)
NUnit (http://aka.ms/nunit-vs11)
MAY 8, 2012 | SLIDE 13
13. VS11 – CI IMPROVEMENTS
Continuously Run Unit Tests
Separate Code Analysis Results window
MAY 8, 2012 | SLIDE 14
14. VS11 – CI IMPROVEMENTS
Tracking Builds
MAY 8, 2012 | SLIDE 15
15. VS11 – CI IMPROVEMENTS
Faster Feedback
Dialog Prompt
Auto-Reconciliation
Toast notifications
Improved accessibility to builds
Own recent builds overview
Favorites!
Filter definitions using search box
MAY 8, 2012 | SLIDE 16
16. TFS ONLINE (BETA)
Built upon Windows Azure
“TFS in the Cloud”
Benefits
Incremental feature upgrades
Reduced timespan between major upgrades
Setup & configuration by Microsoft
Most of internal support & maintenance by Microsoft
Identity management
Via Windows Azure ACS
Only Live ID at the moment
Federation to come?
MAY 8, 2012 | SLIDE 17
17. DEALING WITH
DEPENDENCIES
MAY 8, 2012 | SLIDE 18
18. 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.”
MAY 8, 2012 | SLIDE 19
19. REACTIONS
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 v7 Platform Update SP3 November Edition
KB2348063 RTW Refresh
What happened to reuse of components?
We lost ownership of AssemblyVersion ?
MAY 8, 2012 | SLIDE 20
20. CAUSE AND EFFECT
Reference-by-source
• “Needed for debugging”
syndrome
• Found a bug and fixed it
• Upgrade path: merges!
Reference-by-release
• Use symbols for debugging
• Report/Fix the bug and submit
a pull request
• Clean upgrade path
MAY 8, 2012 | SLIDE 21
22. NUGET
NuGet Gallery
5000+ unique packages
Within “2 clicks or 1 command” reach inside Visual Studio
NuGet improved
Discoverability
Upgrade experience
Reuse of software
Reference-by-release + symbols for everyone
NuGet provides opportunities
Dependency management
Reach, discoverability & visibility of own packages
MAY 8, 2012 | SLIDE 23
23. VERSIONING
NuGet supports Semantic Versioning
http://www.semver.org
Major Breaking changes
Minor Backwards compatible API
additions/changes
Patch Bugfixes not affecting the
API
Prerelease
Tags: Alpha, Beta, RC, … (e.g. v1.0.0-RC)
Note: precedence in alphabetic order!
MAY 8, 2012 | SLIDE 24
24. NUGET SUPPORTS SEMANTIC VERSIONING
But not entirely…
NuGet doesn’t support 4th version number (build) for prereleases
1.0.0-RC.32190
Caution: pick a scheme!
Major.Minor.Patch[-Prerelease]
Major.Minor.Patch[.Build]
Workaround:
push CI packages to another feed, e.g. MyGet.org
mark CI packages as prerelease when pushing to NuGet.org
– Remove Build number
– Append Prerelease tag
MAY 8, 2012 | SLIDE 25
25. DEPENDENCIES VS VCS
In TFS terms: Source Control
Today often contains
Documents
Binaries
Tools
Scripts
Sources
Struggling with binary diffs
Merge conflicts
Repository size
MAY 8, 2012 | SLIDE 26
27. IN OR OUT?
Your choice
Have a strategy!
No-Commit?
What if the package source goes down?
What if a package got removed from the repository?
Mirroring
MAY 8, 2012 | SLIDE 28