msdn live - ci using tfs11 & nuget
DESCRIPTION
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.TRANSCRIPT
APRIL 12, 2023 | SLIDE 1
www.realdolmen.com
CONTINUOUS INTEGRATION USING
&
APRIL 12, 2023 | SLIDE 3
WHO AM I?
Xavier Decoster Antwerp, Belgium www.realdolmen.com Co-founder of MyGet.org Focus on ALM/Web http://www.xavierdecoster.com @xavierdecoster
APRIL 12, 2023 | SLIDE 4
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
APRIL 12, 2023 | SLIDE 5
CONTINUOUS INTEGRATION
Do you speak it?
APRIL 12, 2023 | SLIDE 6
DISCLAIMER
Not saying “my way” must be “your way”
Non-optimal doesn’t mean wrong
Pointing out opportunities and alternatives
APRIL 12, 2023 | SLIDE 7
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
APRIL 12, 2023 | SLIDE 8
Developer
VCS
Build
Tests
Feedback
(OFTEN) NON-OPTIMAL SETUP
Most commonly encountered approach to CI
Automated Build triggered by VCS
All tests run every single time
Eventually someone looks at the CI outcome
APRIL 12, 2023 | SLIDE 9
Developer
VCS
Build
Tests
Feedback
WHAT IF…
… compilation fails? Changes already in VCS! Entire team affected
… a test fails? Same story!
… no one noticed the CI failed? Kittens die!
APRIL 12, 2023 | SLIDE 10
Developer
Build
Tests
Feedback
VCS
OPTIMIZE FOR HAPPINESS
Integrate first! Gated check-ins
Integration fails? Changeset rejected
Integration succeeds? Changeset committed
Every successful check-in is a reward for good work.
APRIL 12, 2023 | SLIDE 11
Developer
Build
Tests
Feedback
VCS
OPTIMIZE FOR QUALITY
Code Analysis
Test Impact Analysis
APRIL 12, 2023 | SLIDE 12
TFS11 – CI IMPROVEMENTS
Build Triggers
APRIL 12, 2023 | SLIDE 13
TFS11 – CI IMPROVEMENTS
Supporting multiple test frameworks MSTest (built-in) xUnit (http://aka.ms/xunit-vs11) NUnit (http://aka.ms/nunit-vs11)
Visual Studio Unit Test Platform
MS-Test Manage
d
MS-Test-Native NUnit xUnit.n
et QUnit MORE!
Visual Studio Unit Test Explorer
Command Line Runner
TeamBuild Unit Test Activity
APRIL 12, 2023 | SLIDE 14
VS11 – CI IMPROVEMENTS
Continuously Run Unit Tests
Separate Code Analysis Results window
APRIL 12, 2023 | SLIDE 15
VS11 – CI IMPROVEMENTS
Tracking Builds
APRIL 12, 2023 | SLIDE 16
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
APRIL 12, 2023 | SLIDE 17
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?
APRIL 12, 2023 | SLIDE 18
DEALING WITH DEPENDENCIES
APRIL 12, 2023 | SLIDE 19
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.”
APRIL 12, 2023 | SLIDE 20
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 ?
APRIL 12, 2023 | SLIDE 21
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
APRIL 12, 2023 | SLIDE 22
PACKAGEMANAGEMENT
APRIL 12, 2023 | SLIDE 23
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
APRIL 12, 2023 | SLIDE 24
VERSIONING
NuGet supports Semantic Versioning http://www.semver.org
Prerelease Tags: Alpha, Beta, RC, … (e.g. v1.0.0-RC) Note: precedence in alphabetic order!
Major Breaking changes
Minor Backwards compatible API additions/changes
Patch Bugfixes not affecting the API
APRIL 12, 2023 | SLIDE 25
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
APRIL 12, 2023 | SLIDE 26
DEPENDENCIES VS VCS
In TFS terms: Source Control Today often contains
Documents Binaries Tools Scripts Sources
Struggling with binary diffs Merge conflicts
Repository size
APRIL 12, 2023 | SLIDE 27
PACKAGE REPOSITORY
NuGet Package Repository Package Restore feature
Opportunity Get rid of binaries in VCS Decrease binary diff issues & merge conflicts Decrease VCS repository size Manage dependencies centrally Fine-grained packages = fine-grained dependencies
APRIL 12, 2023 | SLIDE 28
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
APRIL 12, 2023 | SLIDE 29
SOLUTION SETUP
Package RestorePackage & Symbols Publishing
APRIL 12, 2023 | SLIDE 30
DEMO SUMMARY
Enable-PackageRestore
Install-Package NuSpec Install-NuSpec <project> -EnablePackageBuild Enable-PackagePush Set pkg src URL, symbols src URL, API-key
Easy package creation (IntelliSense) Automatic package building & versioning Automatic package & symbols pushing
APRIL 12, 2023 | SLIDE 31
RESOURCES
Continuous Integration:http://martinfowler.com/articles/continuousIntegration.html
Team Foundation Service (Preview):http://tfspreview.com/ (ALM Rangers whitepaper)
Visual Studio 11 & TFS 11 (Beta):http://www.microsoft.com/visualstudio/11/en-us
NuGet: http://www.nuget.org
http://docs.nuget.org/docs/start-here/overview
MyGet: http://www.myget.org
SymbolSource: http://www.symbolsource.org
PM> Install-Package ProNuGet
APRIL 12, 2023 | SLIDE 33
Q&A
APRIL 12, 2023 | SLIDE 34
THANK YOU FOR JOINING
Xavier Decoster
http://about.me/xavierdecoster
http://www.xavierdecoster.com
@xavierdecoster