Upgrade to Pro — share decks privately, control downloads, hide ads and more …

UgiAlt.NET - Organize your Chickens: NuGet for the Enterprise

UgiAlt.NET - Organize your Chickens: NuGet for the Enterprise

Xavier Decoster

January 20, 2012
Tweet

More Decks by Xavier Decoster

Other Decks in Technology

Transcript

  1. Who am I? › Xavier Decoster › Antwerp, Belgium ›

    Focus on  What matters › www.xavierdecoster.com › @xavierdecoster
  2. Agenda › NuGet › Scenarios  Host your own NuGet

    repository  Continuous {Package} Integration  {Ab}using NuGet  NuGet Inception › Conclusion Chickens?!
  3. Welcome to Dependency Hell “A term for the frustration of

    software users who have installed software packageswhich have dependencies on specific versions of other software packages.” (Wikipedia)
  4. Cause and Effect › Reinventingthe wheel  We don’tneedthatdependency 

    “If they can do it, we can do it, but better” › Marketing-DrivenVersioning  People are waitingforv2 tobuy  Let’s call it v4 Platform Update SP3 November Edition KB2348063 RTW Refresh
  5. Package Management › NuGet to the Rescue! › Simple concept

     Find Packages  {Re}Use Packages  Produce Packages “NuGet is a Visual Studio extension that makes it easy to install and update open source libraries and tools in Visual Studio.”
  6. Semantic Versioning › Think about your versioning! {semver.org}  Always

    specify lowerbound  Use a version range {lowerbound + upperbound} when versioning of package you depend on is messed up Major Breaking changes Minor Backwards compatible API additions/changes Patch Bugfixes not affecting the API
  7. Advanced usage scenarios › Host your own NuGet repository ›

    Continuous{Package} Integration › {Ab}usingNuGet
  8. 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
  9. 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 todevelop if you want something more useful
  10. Meet MyGet › www.myget.org › NaaS  Register andoff you

    go! › Supports Enterprise scenarios  Granular security  Package mirroring
  11. 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
  12. 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.
  13. Continuous {Package} Integration › Can I get rid of allthese

    referenced assemblies duplicated all-over my source control system? › Do I need to installandmaintainNuGet on allmy build agents?
  14. 3rd parties don’t belong in your VCS › Replace them

    with NuGet packages › Do commit packages\repositories.configfile › Use Enable-PackageRestore › Set package-source location(s) (NuGet.settings.targets in $(SolutionDir)\.nuget folder)
  15. Problem! › NuGet feed is subject to change...  PackageSource

    msbuild property to the rescue › Now what...  Host your own feed and mirror packages  Or use MyGet for that 
  16. Organize yourchickens › Feed structuring  Scoped by quality: Build,

    QA, Production, …  Scoped by audience: public, restricted access  Other: Scopedby product version, milestone… Scopedby target platform
  17. Guidance › Publishing a package brings great responsibility  Breaking

    changes in your packages should be versioned accordingly!  Consumers might choose to no longer consume anypackages you published
  18. Guidance › Package Integration ≠ Integration Testing  CI builds

    reflect output of source control input  Same input alwaysproduces same output  Do notauto-update packages duringautomated builds
  19. The Male Optical Illusion Stare at this picture. After about

    30 seconds you should begin to see a Boat appear in the background. Amazing! *** Some men report ittakes them several minutes tosee the boat, sobe patient andreally focus!!! ***
  20. {Ab}using NuGet? › Change of perspective NuGet is a package

    manager NuGet is a protocol for distributing packages
  21. Automate deployments › Build results in .nupkg › Octopus deploys

    to its tentacles  Test tentacles  Staging tentacles  Production tentacles › www.octopusdeploy.com
  22. Chocolatey › NuGet  developer library packages › Chocolatey 

    applications and tools packager  “yum” or “apt-get” for Windows › www.chocolatey.org
  23. NuGet Inception Build Test Package Push Release / Publish Deploy

    DEMO › ContinuousDelivery of the MyGet website using:  TeamCity  NuGet  MyGet  Octopus
  24. Dependencies & people are chickens Deal with them! NuGet can

    help Set up your own NuGet repository Continuouspackage integration NuGet is a package manager NuGet is a protocol Conclusion
  25. Thank you! // No chickenswerehurt // in the making of

    thispresentation http://www.xavierdecoster.com @xavierdecoster Stay for the price draw for a chance to win a copy