NuGet Kibbles And Bits: Learn How To Build And Publish A NuGet Package
Organize your Chickens - NuGet for the Enterprise (UGIALTNET)
Click here to load reader
-
Upload
xavier-decoster -
Category
Technology
-
view
2.624 -
download
2
Transcript of Organize your Chickens - NuGet for the Enterprise (UGIALTNET)
www.ugialt.net
NuGet for the EnterpriseOrganize Your Chickens
Who am I?› Xavier Decoster› Antwerp, Belgium› Focus on
What matters
› www.xavierdecoster.com› @xavierdecoster
Agenda› NuGet› Scenarios
Host your own NuGet repository Continuous {Package} Integration {Ab}using NuGet NuGet Inception
› Conclusion
Chickens?!
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” 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!
› 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.”
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 changesMinor Backwards compatible API
additions/changesPatch Bugfixes not affecting the API
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
NuGet.Server Demo// Install-Package 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
MyGet Demo// Sign in to myget.org and get started
Continuous {Package} Integration
// To chicken, or not to check-in
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!
Enable-PackageRestore Demo
// Organize your build chickens!
3rd parties don’t belong in your VCS› Replace them with NuGet packages› Do commit packages\repositories.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
{Ab}using NuGet// Not chickens…
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
The Male Optical IllusionStare 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 managerNuGet is a protocol for distributing packages
NuGet as a Protocol// Automate anything: more time for a NaaP!
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
Chocolatey Demo// Nom-nom NuGet dessert
NuGet Inception
Build
Test
Package
Push
Release / Publish
Deploy
DEMO› Continuous
Delivery of the MyGet website using: TeamCity NuGet MyGet Octopus
Dependencies & people are chickensDeal with them! NuGet can help
Set up your own NuGet repository
Continuous package integration
NuGet is a package managerNuGet is a protocol
Conclusion
Thank you!// No chickens were hurt // in the making of this presentation
http://www.xavierdecoster.com@xavierdecoster
Stay for the price draw for a chance to win a copy