SlideShare a Scribd company logo
Organize Your Chickens - NuGet for the Enterprise
Maarten Balliauw
@maartenballiauw
RealDolmen
Organize Your Chickens
     NuGet for the Enterprise
Who am I?
•   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
• Author: Pro NuGet - http://amzn.to/pronuget
Agenda
• NuGet
• Scenarios
  –   Host your own NuGet repository   Chickens?!
  –   Continuous Package Integration
  –   Abusing NuGet
  –   NuGet Inception
• Conclusion
NuGet
Welcome to Dependency Hell
             frustration
“A term for the                 of software users who have
installed software packages which have dependencies on
specific versions of other software packages.” (Wikipedia)
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-Driven 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 ?
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.”
• Simple concept
  – Find Packages
  – (Re)Use Packages
  – Produce Packages
DEMO
Finding & consuming a NuGet package
DEMOpublishing a NuGet package
Creating &
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
Hosting a repository
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
Solutions
•   Folder / File share
•   NuGet.Server package
•   NuGet Gallery (or Orchard Gallery)
•   MyGet
DEMO
NuGet.Server
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
Meet MyGet
• www.myget.org
• NaaS
  – Register and off you go!
• Supports Enterprise scenarios
  – Granular security
  – Package mirroring
  – Proxying
DEMO
MyGet
Continuous Package
Integration
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
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.
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!
DEMO
Package Restore
3rd parties don’t belong in your VCS
• Replace them with NuGet packages
• Do commit packagesrepositories.config file
• Use Enable-PackageRestore
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 packages
  – Or use MyGet for that 
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
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
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
Abusing NuGet
Abusing NuGet?
Change of perspective

                  NuGet is a package manager
                  NuGet is a protocol for
                  distributing packages
NuGet as a Protocol
Automate deployments
• Build results in .nupkg
• Octopus deploys to its tentacles
  – Test tentacles
  – Staging tentacles
  – Production tentacles
• www.octopusdeploy.com
Chocolatey
• NuGet
  – developer library packages
• Chocolatey
  – applications and tools packager
  – “yum” or “apt-get” for Windows
• www.chocolatey.org
DEMO
Chocolatey
Build                  Continuous
     Test
                         Delivery of the
                         MyGet website
            Package      using:
            Push              TeamCity
                              NuGet
     Release / Publish
                              MyGet
  Deploy                      Octopus

DEMO Delivery
Continuous
Conclusion
Dependencies & people are chickens
     Deal with them! NuGet can help

 Set up your own NuGet repository

  Continuous package integration

   NuGet is a package manager
           NuGet is a protocol
http://blog.maartenballiauw.be
                               @maartenballiauw




  THANK YOU!      http://amzn.to/pronuget
               or Install-Package ProNuGet


#tdvs

More Related Content

What's hot

2011 - Dotnet Information Day: NUGET
2011 - Dotnet Information Day: NUGET2011 - Dotnet Information Day: NUGET
2011 - Dotnet Information Day: NUGET
Daniel Fisher
 
Deployment taken seriously with Octopus Deploy and TeamCity
Deployment taken seriously with Octopus Deploy and TeamCityDeployment taken seriously with Octopus Deploy and TeamCity
Deployment taken seriously with Octopus Deploy and TeamCity
Tomas Jansson
 

What's hot (20)

2011 - Dotnet Information Day: NUGET
2011 - Dotnet Information Day: NUGET2011 - Dotnet Information Day: NUGET
2011 - Dotnet Information Day: NUGET
 
Maven beyond hello_world
Maven beyond hello_worldMaven beyond hello_world
Maven beyond hello_world
 
Getting started with Octopus Deploy
Getting started with Octopus DeployGetting started with Octopus Deploy
Getting started with Octopus Deploy
 
Deployment taken seriously with Octopus Deploy and TeamCity
Deployment taken seriously with Octopus Deploy and TeamCityDeployment taken seriously with Octopus Deploy and TeamCity
Deployment taken seriously with Octopus Deploy and TeamCity
 
Volunteering at YouSee on Technology Support
Volunteering at YouSee on Technology SupportVolunteering at YouSee on Technology Support
Volunteering at YouSee on Technology Support
 
JHipster overview and roadmap (August 2017)
JHipster overview and roadmap (August 2017)JHipster overview and roadmap (August 2017)
JHipster overview and roadmap (August 2017)
 
Uyuni Community Hours 27.11.2020
Uyuni Community Hours 27.11.2020Uyuni Community Hours 27.11.2020
Uyuni Community Hours 27.11.2020
 
Octopus Deploy Tech Fest 2014
Octopus Deploy Tech Fest 2014Octopus Deploy Tech Fest 2014
Octopus Deploy Tech Fest 2014
 
Octopus Deploy @Erie Day of Code
Octopus Deploy @Erie Day of CodeOctopus Deploy @Erie Day of Code
Octopus Deploy @Erie Day of Code
 
Development nightmares
Development nightmaresDevelopment nightmares
Development nightmares
 
First steps with Gutenberg for developers - WC Prague 2020
First steps with Gutenberg for developers - WC Prague 2020First steps with Gutenberg for developers - WC Prague 2020
First steps with Gutenberg for developers - WC Prague 2020
 
open source product management (feat. npm)
open source product management (feat. npm)open source product management (feat. npm)
open source product management (feat. npm)
 
Vagrant and puppet: Deployment made easy
Vagrant and puppet: Deployment made easyVagrant and puppet: Deployment made easy
Vagrant and puppet: Deployment made easy
 
The State of Puppet - Dan Bode
The State of Puppet - Dan BodeThe State of Puppet - Dan Bode
The State of Puppet - Dan Bode
 
Automated Infrastructure and Application Management
Automated Infrastructure and Application ManagementAutomated Infrastructure and Application Management
Automated Infrastructure and Application Management
 
The swiss knife of a word press developer
The swiss knife of a word press developerThe swiss knife of a word press developer
The swiss knife of a word press developer
 
npm + browserify
npm + browserifynpm + browserify
npm + browserify
 
DevOps and Drupal
DevOps and DrupalDevOps and Drupal
DevOps and Drupal
 
Building at a glance
Building at a glanceBuilding at a glance
Building at a glance
 
Devops For Drupal
Devops  For DrupalDevops  For Drupal
Devops For Drupal
 

Viewers also liked (6)

Coursera rprog 2015
Coursera rprog 2015Coursera rprog 2015
Coursera rprog 2015
 
Demystifying HTML5
Demystifying HTML5Demystifying HTML5
Demystifying HTML5
 
True story of re architecting website for scale on windows azure
True story of re architecting website for scale on windows azureTrue story of re architecting website for scale on windows azure
True story of re architecting website for scale on windows azure
 
Design Pattern that every cloud developer must know
Design Pattern that every cloud developer must know Design Pattern that every cloud developer must know
Design Pattern that every cloud developer must know
 
Cloud Architecture Patterns for Mere Mortals - Bill Wilder - Vermont Code Cam...
Cloud Architecture Patterns for Mere Mortals - Bill Wilder - Vermont Code Cam...Cloud Architecture Patterns for Mere Mortals - Bill Wilder - Vermont Code Cam...
Cloud Architecture Patterns for Mere Mortals - Bill Wilder - Vermont Code Cam...
 
Hadoop in the Cloud: Common Architectural Patterns
Hadoop in the Cloud: Common Architectural PatternsHadoop in the Cloud: Common Architectural Patterns
Hadoop in the Cloud: Common Architectural Patterns
 

Similar to Organize your chickens: NuGet for the enterprise

NuGet (anti-)patterns - Tales from the Trenches
NuGet (anti-)patterns - Tales from the TrenchesNuGet (anti-)patterns - Tales from the Trenches
NuGet (anti-)patterns - Tales from the Trenches
Xavier Decoster
 
5 minute intro to virtualenv
5 minute intro to virtualenv5 minute intro to virtualenv
5 minute intro to virtualenv
amenasse
 
Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...
Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...
Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...
mfrancis
 
Using the pip package manager for Odoo
Using the pip package manager for OdooUsing the pip package manager for Odoo
Using the pip package manager for Odoo
Odoo
 

Similar to Organize your chickens: NuGet for the enterprise (20)

Organize your Chickens - NuGet for the Enterprise (UGIALTNET)
Organize your Chickens - NuGet for the Enterprise (UGIALTNET)Organize your Chickens - NuGet for the Enterprise (UGIALTNET)
Organize your Chickens - NuGet for the Enterprise (UGIALTNET)
 
Organize your chickens: NuGet for the enterprise
Organize your chickens: NuGet for the enterpriseOrganize your chickens: NuGet for the enterprise
Organize your chickens: NuGet for the enterprise
 
Hosting your own NuGet private repository
Hosting your own NuGet private repositoryHosting your own NuGet private repository
Hosting your own NuGet private repository
 
NuGet (anti-)patterns - Tales from the Trenches
NuGet (anti-)patterns - Tales from the TrenchesNuGet (anti-)patterns - Tales from the Trenches
NuGet (anti-)patterns - Tales from the Trenches
 
5 minute intro to virtualenv
5 minute intro to virtualenv5 minute intro to virtualenv
5 minute intro to virtualenv
 
Getting Started with Azure Artifacts
Getting Started with Azure ArtifactsGetting Started with Azure Artifacts
Getting Started with Azure Artifacts
 
Fluo CICD OpenStack Summit
Fluo CICD OpenStack SummitFluo CICD OpenStack Summit
Fluo CICD OpenStack Summit
 
NuGet Packages Presentation (DoT NeT).pptx
NuGet Packages Presentation (DoT NeT).pptxNuGet Packages Presentation (DoT NeT).pptx
NuGet Packages Presentation (DoT NeT).pptx
 
Smarter deployments with octopus deploy
Smarter deployments with octopus deploySmarter deployments with octopus deploy
Smarter deployments with octopus deploy
 
.Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013
.Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013 .Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013
.Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013
 
Release management with NuGet/Chocolatey/JIRA
Release management with NuGet/Chocolatey/JIRARelease management with NuGet/Chocolatey/JIRA
Release management with NuGet/Chocolatey/JIRA
 
Nuget is easier than you think and you should be using it as both a consumer ...
Nuget is easier than you think and you should be using it as both a consumer ...Nuget is easier than you think and you should be using it as both a consumer ...
Nuget is easier than you think and you should be using it as both a consumer ...
 
Controlling Component Chaos with NuGet and Versioning
Controlling Component Chaos with NuGet and VersioningControlling Component Chaos with NuGet and Versioning
Controlling Component Chaos with NuGet and Versioning
 
Puppet Camp LA 2015: Package Managers and Puppet (Beginner)
Puppet Camp LA 2015: Package Managers and Puppet (Beginner)Puppet Camp LA 2015: Package Managers and Puppet (Beginner)
Puppet Camp LA 2015: Package Managers and Puppet (Beginner)
 
Puppet Camp LA 2/19/2015
Puppet Camp LA 2/19/2015Puppet Camp LA 2/19/2015
Puppet Camp LA 2/19/2015
 
Testing your puppet code
Testing your puppet codeTesting your puppet code
Testing your puppet code
 
Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...
Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...
Improved developer productivity thanks to Maven and OSGi - Lukasz Dywicki (Co...
 
Deploying software at Scale
Deploying software at ScaleDeploying software at Scale
Deploying software at Scale
 
Using the "pip" package manager for Odoo/OpenERP - Opendays 2014
Using the "pip" package manager for Odoo/OpenERP - Opendays 2014Using the "pip" package manager for Odoo/OpenERP - Opendays 2014
Using the "pip" package manager for Odoo/OpenERP - Opendays 2014
 
Using the pip package manager for Odoo
Using the pip package manager for OdooUsing the pip package manager for Odoo
Using the pip package manager for Odoo
 

More from Maarten Balliauw

More from Maarten Balliauw (20)

Bringing nullability into existing code - dammit is not the answer.pptx
Bringing nullability into existing code - dammit is not the answer.pptxBringing nullability into existing code - dammit is not the answer.pptx
Bringing nullability into existing code - dammit is not the answer.pptx
 
Nerd sniping myself into a rabbit hole... Streaming online audio to a Sonos s...
Nerd sniping myself into a rabbit hole... Streaming online audio to a Sonos s...Nerd sniping myself into a rabbit hole... Streaming online audio to a Sonos s...
Nerd sniping myself into a rabbit hole... Streaming online audio to a Sonos s...
 
Building a friendly .NET SDK to connect to Space
Building a friendly .NET SDK to connect to SpaceBuilding a friendly .NET SDK to connect to Space
Building a friendly .NET SDK to connect to Space
 
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo...
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo...Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo...
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo...
 
Indexing and searching NuGet.org with Azure Functions and Search - .NET fwday...
Indexing and searching NuGet.org with Azure Functions and Search - .NET fwday...Indexing and searching NuGet.org with Azure Functions and Search - .NET fwday...
Indexing and searching NuGet.org with Azure Functions and Search - .NET fwday...
 
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
 
JetBrains Australia 2019 - Exploring .NET’s memory management – a trip down m...
JetBrains Australia 2019 - Exploring .NET’s memory management – a trip down m...JetBrains Australia 2019 - Exploring .NET’s memory management – a trip down m...
JetBrains Australia 2019 - Exploring .NET’s memory management – a trip down m...
 
.NET Conf 2019 - Indexing and searching NuGet.org with Azure Functions and Se...
.NET Conf 2019 - Indexing and searching NuGet.org with Azure Functions and Se....NET Conf 2019 - Indexing and searching NuGet.org with Azure Functions and Se...
.NET Conf 2019 - Indexing and searching NuGet.org with Azure Functions and Se...
 
CloudBurst 2019 - Indexing and searching NuGet.org with Azure Functions and S...
CloudBurst 2019 - Indexing and searching NuGet.org with Azure Functions and S...CloudBurst 2019 - Indexing and searching NuGet.org with Azure Functions and S...
CloudBurst 2019 - Indexing and searching NuGet.org with Azure Functions and S...
 
NDC Oslo 2019 - Indexing and searching NuGet.org with Azure Functions and Search
NDC Oslo 2019 - Indexing and searching NuGet.org with Azure Functions and SearchNDC Oslo 2019 - Indexing and searching NuGet.org with Azure Functions and Search
NDC Oslo 2019 - Indexing and searching NuGet.org with Azure Functions and Search
 
Approaches for application request throttling - Cloud Developer Days Poland
Approaches for application request throttling - Cloud Developer Days PolandApproaches for application request throttling - Cloud Developer Days Poland
Approaches for application request throttling - Cloud Developer Days Poland
 
Indexing and searching NuGet.org with Azure Functions and Search - Cloud Deve...
Indexing and searching NuGet.org with Azure Functions and Search - Cloud Deve...Indexing and searching NuGet.org with Azure Functions and Search - Cloud Deve...
Indexing and searching NuGet.org with Azure Functions and Search - Cloud Deve...
 
Approaches for application request throttling - dotNetCologne
Approaches for application request throttling - dotNetCologneApproaches for application request throttling - dotNetCologne
Approaches for application request throttling - dotNetCologne
 
CodeStock - Exploring .NET memory management - a trip down memory lane
CodeStock - Exploring .NET memory management - a trip down memory laneCodeStock - Exploring .NET memory management - a trip down memory lane
CodeStock - Exploring .NET memory management - a trip down memory lane
 
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
 
ConFoo Montreal - Approaches for application request throttling
ConFoo Montreal - Approaches for application request throttlingConFoo Montreal - Approaches for application request throttling
ConFoo Montreal - Approaches for application request throttling
 
Microservices for building an IDE – The innards of JetBrains Rider - TechDays...
Microservices for building an IDE – The innards of JetBrains Rider - TechDays...Microservices for building an IDE – The innards of JetBrains Rider - TechDays...
Microservices for building an IDE – The innards of JetBrains Rider - TechDays...
 
JetBrains Day Seoul - Exploring .NET’s memory management – a trip down memory...
JetBrains Day Seoul - Exploring .NET’s memory management – a trip down memory...JetBrains Day Seoul - Exploring .NET’s memory management – a trip down memory...
JetBrains Day Seoul - Exploring .NET’s memory management – a trip down memory...
 
DotNetFest - Let’s refresh our memory! Memory management in .NET
DotNetFest - Let’s refresh our memory! Memory management in .NETDotNetFest - Let’s refresh our memory! Memory management in .NET
DotNetFest - Let’s refresh our memory! Memory management in .NET
 
VISUG - Approaches for application request throttling
VISUG - Approaches for application request throttlingVISUG - Approaches for application request throttling
VISUG - Approaches for application request throttling
 

Recently uploaded

Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Peter Udo Diehl
 

Recently uploaded (20)

ECS 2024 Teams Premium - Pretty Secure
ECS 2024   Teams Premium - Pretty SecureECS 2024   Teams Premium - Pretty Secure
ECS 2024 Teams Premium - Pretty Secure
 
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
 
Free and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
Free and Effective: Making Flows Publicly Accessible, Yumi IbrahimzadeFree and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
Free and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
 
Speed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in MinutesSpeed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in Minutes
 
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
 
Connecting the Dots in Product Design at KAYAK
Connecting the Dots in Product Design at KAYAKConnecting the Dots in Product Design at KAYAK
Connecting the Dots in Product Design at KAYAK
 
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdfIntroduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
 
The Metaverse: Are We There Yet?
The  Metaverse:    Are   We  There  Yet?The  Metaverse:    Are   We  There  Yet?
The Metaverse: Are We There Yet?
 
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
 
Designing for Hardware Accessibility at Comcast
Designing for Hardware Accessibility at ComcastDesigning for Hardware Accessibility at Comcast
Designing for Hardware Accessibility at Comcast
 
Custom Approval Process: A New Perspective, Pavel Hrbacek & Anindya Halder
Custom Approval Process: A New Perspective, Pavel Hrbacek & Anindya HalderCustom Approval Process: A New Perspective, Pavel Hrbacek & Anindya Halder
Custom Approval Process: A New Perspective, Pavel Hrbacek & Anindya Halder
 
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
 
Buy Epson EcoTank L3210 Colour Printer Online.pptx
Buy Epson EcoTank L3210 Colour Printer Online.pptxBuy Epson EcoTank L3210 Colour Printer Online.pptx
Buy Epson EcoTank L3210 Colour Printer Online.pptx
 
AI presentation and introduction - Retrieval Augmented Generation RAG 101
AI presentation and introduction - Retrieval Augmented Generation RAG 101AI presentation and introduction - Retrieval Augmented Generation RAG 101
AI presentation and introduction - Retrieval Augmented Generation RAG 101
 
Optimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through ObservabilityOptimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through Observability
 
Extensible Python: Robustness through Addition - PyCon 2024
Extensible Python: Robustness through Addition - PyCon 2024Extensible Python: Robustness through Addition - PyCon 2024
Extensible Python: Robustness through Addition - PyCon 2024
 
AI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří KarpíšekAI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří Karpíšek
 
UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1
 
Introduction to Open Source RAG and RAG Evaluation
Introduction to Open Source RAG and RAG EvaluationIntroduction to Open Source RAG and RAG Evaluation
Introduction to Open Source RAG and RAG Evaluation
 
Where to Learn More About FDO _ Richard at FIDO Alliance.pdf
Where to Learn More About FDO _ Richard at FIDO Alliance.pdfWhere to Learn More About FDO _ Richard at FIDO Alliance.pdf
Where to Learn More About FDO _ Richard at FIDO Alliance.pdf
 

Organize your chickens: NuGet for the enterprise

  • 1. Organize Your Chickens - NuGet for the Enterprise Maarten Balliauw @maartenballiauw RealDolmen
  • 2. Organize Your Chickens NuGet for the Enterprise
  • 3. Who am I? • 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 • Author: Pro NuGet - http://amzn.to/pronuget
  • 4. Agenda • NuGet • Scenarios – Host your own NuGet repository Chickens?! – Continuous Package Integration – Abusing NuGet – NuGet Inception • Conclusion
  • 6. Welcome to Dependency Hell frustration “A term for the of software users who have installed software packages which have dependencies on specific versions of other software packages.” (Wikipedia)
  • 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-Driven 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 ?
  • 8. 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.” • Simple concept – Find Packages – (Re)Use Packages – Produce Packages
  • 9. DEMO Finding & consuming a NuGet package
  • 10. DEMOpublishing a NuGet package Creating &
  • 11. 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
  • 13. 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
  • 14. Solutions • Folder / File share • NuGet.Server package • NuGet Gallery (or Orchard Gallery) • MyGet
  • 16. 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
  • 17. Meet MyGet • www.myget.org • NaaS – Register and off you go! • Supports Enterprise scenarios – Granular security – Package mirroring – Proxying
  • 20. 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
  • 21. 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.
  • 22. 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!
  • 24. 3rd parties don’t belong in your VCS • Replace them with NuGet packages • Do commit packagesrepositories.config file • Use Enable-PackageRestore
  • 25. 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 packages – Or use MyGet for that 
  • 26. 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
  • 27. 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
  • 28. 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
  • 30. Abusing NuGet? Change of perspective NuGet is a package manager NuGet is a protocol for distributing packages
  • 31. NuGet as a Protocol
  • 32. Automate deployments • Build results in .nupkg • Octopus deploys to its tentacles – Test tentacles – Staging tentacles – Production tentacles • www.octopusdeploy.com
  • 33.
  • 34. Chocolatey • NuGet – developer library packages • Chocolatey – applications and tools packager – “yum” or “apt-get” for Windows • www.chocolatey.org
  • 36. Build Continuous Test Delivery of the MyGet website Package using: Push  TeamCity  NuGet Release / Publish  MyGet Deploy  Octopus DEMO Delivery Continuous
  • 37. Conclusion Dependencies & people are chickens Deal with them! NuGet can help Set up your own NuGet repository Continuous package integration NuGet is a package manager NuGet is a protocol
  • 38. http://blog.maartenballiauw.be @maartenballiauw THANK YOU! http://amzn.to/pronuget or Install-Package ProNuGet #tdvs

Editor's Notes

  1. Maarten
  2. Xavier: Terugverwijzen naar “Marketing versioning”
  3. Start with empty MVC template + addNuGet.ServerpkgRun siteDrop pkgs in packages folderRefresh browserFeed toevoegen in VS & show pkgs
  4. Inloggen en feed aanmakenPackage pushen vanuit NPEFeed toevoegen aan VSOp MyGet feed security instellenPackage installen in VS en tonen dat er basic auth bijkomtPackage van NuGet toevoegen op MyGet en tonen dat je alle dependencies kan meepakken, mirroring, … en dat je ook gewoon van uw packages.config kan toevoegen
  5. - Het feit dat NuGet.org geen garanties biedt op content- Wat als mensen packages verwijderen? BUILD breaks, DEVS unhappy again
  6. Now isnot the time to take a nap (NaaP) NuGet is more than a package (system), it’s a protocol to:Distributesfunctionality (automateanything!, cfrScaffolding!)Distribute websites (akadeployments!)Distribute software in general 
  7. Maarten
  8. Maarten
  9. Xavier
  10. XavierMaartenXavierMaarten