MSDN Live - CI using TFS11 & NuGet

Preview:

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.

Citation preview

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 32

BONUS

http://bit.ly/mygetforfree

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