Date post: | 13-May-2015 |
Category: |
Technology |
Upload: | maarten-balliauw |
View: | 902 times |
Download: | 0 times |
APRIL 12, 2023 | SLIDE 1
APRIL 12, 2023 | SLIDE 2
Organize Your ChickensNuGet for the EnterpriseMaarten Balliauw@maartenballiauw
APRIL 12, 2023 | SLIDE 3
NuGet for the Enterprise
Organize Your Chickens
APRIL 12, 2023 | SLIDE 4
Who am I? Maarten Balliauw Antwerp, Belgium www.realdolmen.com Focus on web
ASP.NET MVC, Windows Azure, SignalR, ... MVP Windows Azure & ASPInsider
http://blog.maartenballiauw.be @maartenballiauw Author: Pro NuGet - http://amzn.to/pronuget
APRIL 12, 2023 | SLIDE 5
Agenda NuGet Scenarios
Host your own NuGet repository Continuous Package Integration Abusing NuGet NuGet Inception
Conclusion
Chickens?!
APRIL 12, 2023 | SLIDE 6
NuGet
APRIL 12, 2023 | SLIDE 7
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)
APRIL 12, 2023 | SLIDE 8
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 ?
APRIL 12, 2023 | SLIDE 9
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.”
APRIL 12, 2023 | SLIDE 10
DemoFinding & consuming a NuGet package
APRIL 12, 2023 | SLIDE 11
DemoCreating & publishing a NuGet package
APRIL 12, 2023 | SLIDE 12
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
APRIL 12, 2023 | SLIDE 13
Hosting a repository
APRIL 12, 2023 | SLIDE 14
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
APRIL 12, 2023 | SLIDE 15
Solutions Folder / File share NuGet.Server package NuGet Gallery (or Orchard Gallery) MyGet
APRIL 12, 2023 | SLIDE 16
DemoNuGet.Server
APRIL 12, 2023 | SLIDE 17
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
APRIL 12, 2023 | SLIDE 18
Meet MyGet www.myget.org NaaS
Register and off you go! Supports Enterprise scenarios
Granular security Package mirroring Proxying
APRIL 12, 2023 | SLIDE 19
DemoMyGet
APRIL 12, 2023 | SLIDE 20
Continuous Package Integration
APRIL 12, 2023 | SLIDE 21
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
APRIL 12, 2023 | SLIDE 22
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.
APRIL 12, 2023 | SLIDE 23
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!
APRIL 12, 2023 | SLIDE 24
DemoPackage Restore
APRIL 12, 2023 | SLIDE 25
3rd parties don’t belong in your VCS
Replace them with NuGet packages Do commit packages\repositories.config file
Use Enable-PackageRestore
APRIL 12, 2023 | SLIDE 26
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
APRIL 12, 2023 | SLIDE 27
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
APRIL 12, 2023 | SLIDE 28
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
APRIL 12, 2023 | SLIDE 29
Guidance Package Integration ≠ Integration Testing
CI builds reflect output of source control input Same input always produces same output
Do not auto-update packagesduring automated builds
APRIL 12, 2023 | SLIDE 30
Abusing NuGet
APRIL 12, 2023 | SLIDE 31
Abusing NuGet?
Change of perspective
NuGet is a package managerNuGet is a protocol for distributing packages
APRIL 12, 2023 | SLIDE 32
NuGet as a Protocol
APRIL 12, 2023 | SLIDE 33
Chocolatey NuGet
developer library packages Chocolatey
applications and tools packager “yum” or “apt-get” for Windows
www.chocolatey.org
APRIL 12, 2023 | SLIDE 34
DemoChocolatey
APRIL 12, 2023 | SLIDE 35
Automate deployments Build results in .nupkg Octopus deploys to its tentacles
Test tentacles Staging tentacles Production tentacles
www.octopusdeploy.com
APRIL 12, 2023 | SLIDE 36
APRIL 12, 2023 | SLIDE 37
DemoContinuous Delivery
Build
Test
Package
Push
Release / Publish
Deploy
APRIL 12, 2023 | SLIDE 38
ConclusionDependencies & people are chickens
Deal with them! NuGet can help
Set up your own NuGet repository
Continuous package integration
NuGet is a package managerNuGet is a protocol
APRIL 12, 2023 | SLIDE 39
THANK YOU!
http://blog.maartenballiauw.be@maartenballiauw
http://amzn.to/pronugetor Install-Package ProNuGet