What are the Artifactory and Nexus? And why do we need them?

What are the Artifactory and Nexus? And why do we need them?

The information from the Artifactory and Nexus projects official pages:

So, Nexus is about:

  • The perfect system of record for all your software parts.
  • Manage components, build artifacts, and release candidates in one central location.
  • Understand component security, license, and quality issues.
  • Modernize software development with intelligent staging and release functionality.
  • Scale DevOps delivery with high availability and active/active clustering.
  • Sleep comfortably with world-class support and training.
  • Universal support for all your favorite formats and tools.
  • Store and distribute Maven/Java, npm, NuGet, RubyGems, Docker, P2, OBR, APT and YUM and more.
  • Manage components from dev through delivery: binaries, containers, assemblies, and finished goods.
  • Awesome support for the Java Virtual Machine (JVM) ecosystem, including Gradle, Ant, Maven, and Ivy.
  • Integrated with popular tools like Eclipse, IntelliJ, Hudson, Jenkins, Puppet, Chef, Docker, and more.

And Artifactory is about:
Artifactory is a product by JFrog that serves as a binary repository manager. That said very often one will use an artifactory as a synonym of the more general binary repository, much like many people use Frigidaire or fridge to denote the refrigerator regardless if it is a Frigidaire brand or not.

The binary repository is a natural extension to the source code repository in that it will store the outcome of your build process, often denoted as artefacts. Most of the times one would not use the binary repository directly but through a package manager that comes with the chosen technology.

In most cases these will store individual application components that can later be assembled in a full product. Thus allowing a build to be broken in smaller chunks making more efficient use of resources, reducing build times, better tracking of binary debug databases etc

Here are some of the most popular package manager that can be managed using a binary repository:

Java : jar, ear, war etc has Maven and the official MavenCentral. There are many other package managers that will use the maven binary repository format as well (ivy, gradle etc)
.Net : nuget for .NET components (DLL and EXE) but can also be used as a distribution mechanism under windows thorugh systems like Chocolatey. Newer versions of Powershell can also leverage this to distribute powershell modules though the powershell gallery of which one could build a local distribution with a binary repository and a repository in nuget format. Also check OneGet if windows distribution management is of interest to you.
In javascript : we have npm which is one of the most popular, will require nodejs
In python : there is pip and the official package index pypi, which one can also create a local instance through binary repository that will support the format.
This list is far from complete, just gives an idea of what's out there.

The binary repository can allow to host under one roof all of these making their management much simpler for teams. Note that you do not need a very large team to start reaping benefits from binary package management. The initial investment is not very large and the benefits are felt immediately. Especially that more and more platforms, frameworks and languages are integrating this dependency management directly in them. Their biggest advantage I have found however was to create an environment that your programmers will find natural and comfortable making it essential. It helps you as a devops creating a solid tool-chain and it helps them making the overall experience fit naturally in their stack of choice.

As said earlier there are many products out there that can serve as binary package managers some more generic than others in their target usage varying also widely in their accessibility and prices.

The binary repositories are as vital part of a well designed devops setup as would the source code repository or the continuous integration.

Read more: