SlideShare ist ein Scribd-Unternehmen logo
1 von 37
www.ugialt.net
Organize Your Chickens
   NuGet for the Enterprise
Who am I?
› Xavier Decoster
› Antwerp, Belgium
› Focus on
   What matters


› www.xavierdecoster.com
› @xavierdecoster
Agenda
› NuGet
› Scenarios
     Host your own NuGet repository
                                         Chickens?!
     Continuous {Package} Integration
     {Ab}using NuGet
     NuGet Inception
› Conclusion
Welcome to 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.” (Wikipedia)
Cause and Effect
› 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 v4 Platform Update SP3 November Edition
    KB2348063 RTW Refresh
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
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
Advanced usage scenarios
› Host your own NuGet repository
› Continuous {Package} Integration
› {Ab}using NuGet
Hosting your own 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
// Install-Package NuGet.Server

NuGet.Server Demo
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
// Sign in to myget.org and get started

MyGet Demo
// To chicken, or not to check-in

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?



› Do I need to install and maintain NuGet on all my build
  agents?
// Organize your build chickens!

Enable-PackageRestore Demo
3rd parties don’t belong in your VCS
› Replace them with NuGet packages
› Do commit
  packagesrepositories.config file
› Use Enable-PackageRestore
› Set package-source location(s)
  (NuGet.settings.targets in $(SolutionDir).nuget folder)
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 
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
// Not chickens…

{Ab}using NuGet
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
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 it takes them several minutes to see the boat, so be patient and really focus!!! ***
{Ab}using NuGet?
› Change of perspective

                   NuGet is a package
                   manager
                   NuGet is a protocol for
                   distributing packages
// Automate anything: more time for a NaaP!

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
// Nom-nom NuGet dessert

Chocolatey Demo
NuGet Inception

  Build                 DEMO
    Test                › Continuous Delivery
                          of the MyGet
           Package
                          website using:
           Push              TeamCity
                             NuGet
    Release / Publish
                             MyGet
  Deploy                     Octopus
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://www.xavierdecoster.com
                                             @xavierdecoster




                                            Stay for the price draw
                                        for a chance to win a copy

// No chickens were hurt
// in the making of this presentation

Thank you!

Weitere ähnliche Inhalte

Ähnlich wie 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 enterpriseMaarten Balliauw
 
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 enterpriseMaarten Balliauw
 
Mvc dev rocks 00 apr 26, 2014 - creating and using nu get in your own house...
Mvc dev rocks 00   apr 26, 2014 - creating and using nu get in your own house...Mvc dev rocks 00   apr 26, 2014 - creating and using nu get in your own house...
Mvc dev rocks 00 apr 26, 2014 - creating and using nu get in your own house...Suthep Sangvirotjanaphat
 
Vagrant and puppet: Deployment made easy
Vagrant and puppet: Deployment made easyVagrant and puppet: Deployment made easy
Vagrant and puppet: Deployment made easyGeronimo Orozco
 
Using nu get the way you should svcc
Using nu get the way you should   svccUsing nu get the way you should   svcc
Using nu get the way you should svccMaarten Balliauw
 
Smarter deployments with octopus deploy
Smarter deployments with octopus deploySmarter deployments with octopus deploy
Smarter deployments with octopus deployThibaud Gravrand
 
Release management with NuGet/Chocolatey/JIRA
Release management with NuGet/Chocolatey/JIRARelease management with NuGet/Chocolatey/JIRA
Release management with NuGet/Chocolatey/JIRAYaroslav Serhieiev
 
Deploying software at Scale
Deploying software at ScaleDeploying software at Scale
Deploying software at ScaleKris Buytaert
 
Using NuGet the way you should - TechDays NL 2014
Using NuGet the way you should - TechDays NL 2014Using NuGet the way you should - TechDays NL 2014
Using NuGet the way you should - TechDays NL 2014Maarten Balliauw
 
.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 Tikal Knowledge
 
Cooking Perl with Chef: Real World Tutorial with Jitterbug
Cooking Perl with Chef: Real World Tutorial with JitterbugCooking Perl with Chef: Real World Tutorial with Jitterbug
Cooking Perl with Chef: Real World Tutorial with JitterbugDavid Golden
 
Testing your puppet code
Testing your puppet codeTesting your puppet code
Testing your puppet codeJulien Pivotto
 
An overview of the NuGet ecosystem - Mobel.io
An overview of the NuGet ecosystem - Mobel.ioAn overview of the NuGet ecosystem - Mobel.io
An overview of the NuGet ecosystem - Mobel.ioMaarten Balliauw
 
A selection of short stories where Azure DevOps saved the bacon
A selection of short stories where Azure DevOps saved the baconA selection of short stories where Azure DevOps saved the bacon
A selection of short stories where Azure DevOps saved the baconMatteo Emili
 
Understanding NuGet implementation for Enterprises
Understanding NuGet implementation for EnterprisesUnderstanding NuGet implementation for Enterprises
Understanding NuGet implementation for EnterprisesJ S Jodha
 
Matt Bruzek - Monitoring Your Public Cloud With Nagios
Matt Bruzek - Monitoring Your Public Cloud With NagiosMatt Bruzek - Monitoring Your Public Cloud With Nagios
Matt Bruzek - Monitoring Your Public Cloud With NagiosNagios
 
Win Spinnaker with Winnaker - Open Source North Conf 2017
Win Spinnaker with Winnaker - Open Source North Conf 2017Win Spinnaker with Winnaker - Open Source North Conf 2017
Win Spinnaker with Winnaker - Open Source North Conf 2017Medya Ghazizadeh
 
What can possibly go wrong if i dont e2 e test my packages?
What can possibly go wrong if i dont e2 e test my packages?What can possibly go wrong if i dont e2 e test my packages?
What can possibly go wrong if i dont e2 e test my packages?Juan Picado
 
5 minute intro to virtualenv
5 minute intro to virtualenv5 minute intro to virtualenv
5 minute intro to virtualenvamenasse
 
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
 

Ähnlich wie Organize your Chickens - NuGet for the Enterprise (UGIALTNET) (20)

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
 
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
 
Mvc dev rocks 00 apr 26, 2014 - creating and using nu get in your own house...
Mvc dev rocks 00   apr 26, 2014 - creating and using nu get in your own house...Mvc dev rocks 00   apr 26, 2014 - creating and using nu get in your own house...
Mvc dev rocks 00 apr 26, 2014 - creating and using nu get in your own house...
 
Vagrant and puppet: Deployment made easy
Vagrant and puppet: Deployment made easyVagrant and puppet: Deployment made easy
Vagrant and puppet: Deployment made easy
 
Using nu get the way you should svcc
Using nu get the way you should   svccUsing nu get the way you should   svcc
Using nu get the way you should svcc
 
Smarter deployments with octopus deploy
Smarter deployments with octopus deploySmarter deployments with octopus deploy
Smarter deployments with octopus deploy
 
Release management with NuGet/Chocolatey/JIRA
Release management with NuGet/Chocolatey/JIRARelease management with NuGet/Chocolatey/JIRA
Release management with NuGet/Chocolatey/JIRA
 
Deploying software at Scale
Deploying software at ScaleDeploying software at Scale
Deploying software at Scale
 
Using NuGet the way you should - TechDays NL 2014
Using NuGet the way you should - TechDays NL 2014Using NuGet the way you should - TechDays NL 2014
Using NuGet the way you should - TechDays NL 2014
 
.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
 
Cooking Perl with Chef: Real World Tutorial with Jitterbug
Cooking Perl with Chef: Real World Tutorial with JitterbugCooking Perl with Chef: Real World Tutorial with Jitterbug
Cooking Perl with Chef: Real World Tutorial with Jitterbug
 
Testing your puppet code
Testing your puppet codeTesting your puppet code
Testing your puppet code
 
An overview of the NuGet ecosystem - Mobel.io
An overview of the NuGet ecosystem - Mobel.ioAn overview of the NuGet ecosystem - Mobel.io
An overview of the NuGet ecosystem - Mobel.io
 
A selection of short stories where Azure DevOps saved the bacon
A selection of short stories where Azure DevOps saved the baconA selection of short stories where Azure DevOps saved the bacon
A selection of short stories where Azure DevOps saved the bacon
 
Understanding NuGet implementation for Enterprises
Understanding NuGet implementation for EnterprisesUnderstanding NuGet implementation for Enterprises
Understanding NuGet implementation for Enterprises
 
Matt Bruzek - Monitoring Your Public Cloud With Nagios
Matt Bruzek - Monitoring Your Public Cloud With NagiosMatt Bruzek - Monitoring Your Public Cloud With Nagios
Matt Bruzek - Monitoring Your Public Cloud With Nagios
 
Win Spinnaker with Winnaker - Open Source North Conf 2017
Win Spinnaker with Winnaker - Open Source North Conf 2017Win Spinnaker with Winnaker - Open Source North Conf 2017
Win Spinnaker with Winnaker - Open Source North Conf 2017
 
What can possibly go wrong if i dont e2 e test my packages?
What can possibly go wrong if i dont e2 e test my packages?What can possibly go wrong if i dont e2 e test my packages?
What can possibly go wrong if i dont e2 e test my packages?
 
5 minute intro to virtualenv
5 minute intro to virtualenv5 minute intro to virtualenv
5 minute intro to virtualenv
 
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)
 

Kürzlich hochgeladen

Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 

Kürzlich hochgeladen (20)

Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 

Organize your Chickens - NuGet for the Enterprise (UGIALTNET)

  • 2. Organize Your Chickens NuGet for the Enterprise
  • 3. Who am I? › Xavier Decoster › Antwerp, Belgium › Focus on  What matters › www.xavierdecoster.com › @xavierdecoster
  • 4. Agenda › NuGet › Scenarios  Host your own NuGet repository Chickens?!  Continuous {Package} Integration  {Ab}using NuGet  NuGet Inception › Conclusion
  • 5. Welcome to 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.” (Wikipedia)
  • 6. Cause and Effect › 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 v4 Platform Update SP3 November Edition KB2348063 RTW Refresh
  • 7. 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
  • 8. 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
  • 9. Advanced usage scenarios › Host your own NuGet repository › Continuous {Package} Integration › {Ab}using NuGet
  • 10. Hosting your own repository
  • 11. 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
  • 12. Solutions › Folder / File share › NuGet.Server package › NuGet Gallery {or Orchard Gallery} › MyGet
  • 14. 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
  • 15. Meet MyGet › www.myget.org › NaaS  Register and off you go! › Supports Enterprise scenarios  Granular security  Package mirroring
  • 16. // Sign in to myget.org and get started MyGet Demo
  • 17. // To chicken, or not to check-in Continuous {Package} Integration
  • 18. 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
  • 19. 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.
  • 20. Continuous {Package} Integration › Can I get rid of all these referenced assemblies duplicated all-over my source control system? › Do I need to install and maintain NuGet on all my build agents?
  • 21. // Organize your build chickens! Enable-PackageRestore Demo
  • 22. 3rd parties don’t belong in your VCS › Replace them with NuGet packages › Do commit packagesrepositories.config file › Use Enable-PackageRestore › Set package-source location(s) (NuGet.settings.targets in $(SolutionDir).nuget folder)
  • 23. 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 
  • 24. 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
  • 26. 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
  • 27. Guidance › Package Integration ≠ Integration Testing  CI builds reflect output of source control input  Same input always produces same output
  • 28. 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 it takes them several minutes to see the boat, so be patient and really focus!!! ***
  • 29. {Ab}using NuGet? › Change of perspective NuGet is a package manager NuGet is a protocol for distributing packages
  • 30. // Automate anything: more time for a NaaP! NuGet as a Protocol
  • 31. Automate deployments › Build results in .nupkg › Octopus deploys to its tentacles  Test tentacles  Staging tentacles  Production tentacles › www.octopusdeploy.com
  • 32.
  • 33. Chocolatey › NuGet  developer library packages › Chocolatey  applications and tools packager  “yum” or “apt-get” for Windows › www.chocolatey.org
  • 34. // Nom-nom NuGet dessert Chocolatey Demo
  • 35. NuGet Inception Build DEMO Test › Continuous Delivery of the MyGet Package website using: Push  TeamCity  NuGet Release / Publish  MyGet Deploy  Octopus
  • 36. 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
  • 37. http://www.xavierdecoster.com @xavierdecoster Stay for the price draw for a chance to win a copy // No chickens were hurt // in the making of this presentation Thank you!

Hinweis der Redaktion

  1. Xavier: Terugverwijzen naar “Marketing versioning”
  2. Start with empty MVC template + addNuGet.ServerpkgRun siteDrop pkgs in packages folderRefresh browserFeed toevoegen in VS & show pkgs
  3. Inloggen en feed aanmakenPackage pushen vanuit NPEFeed toevoegen aan VSOp MyGet feed security instellenPackage installen in VS en tonen dat er basic auth bijkomtPackage vanNuGet toevoegen op MyGet en tonen dat je alle dependencies kan meepakken, mirroring, … en dat je ook gewoon van uw packages.config kan toevoegen
  4. - Het feit dat NuGet.org geen garanties biedt op content- Wat als mensen packages verwijderen? BUILD breaks, DEVS unhappy again
  5. 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 
  6. TODO Scaffolding? Toevoegen van functies?Eventueel de NuGet.exe plugins ook nog tonen?
  7. Maarten
  8. Maarten
  9. Xavier
  10. Xavier
  11. Maarten
  12. XavierMaartenXavierMaarten