120

There are quite some questions and answers that mention "artifactory".

I wouldn't be surprised if it is somehow related to .

My questions:

  • What is actually an "artifactory" (in the context of DevOps)?
  • Why are artifactories used?
1
  • 2
    Quite a few interesting answers to what I thougt to be a rather basic question. Funny enough they all remind me about a similar concept in good old mainframe environments (where my DevOps roots are ... and where so many DevOps concepts seem to originate from).
    – Pierre.Vriens
    Commented Aug 20, 2018 at 20:52

5 Answers 5

131

Artifactory is a product by JFrog that serves as a binary repository manager. That said very often one will use a '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 artifacts. 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 into 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 managers 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 all of these under one roof, 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 now 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 I 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.

My personal opinion is that binary repositories are as vital a part of a well designed devops setup as the source code repository or continuous integration.

6
  • Merci for this interesting answer (also). For some reason, all this makes me think like "hm, so this is like what we typically call, in good old mainframe environments, things like load libraries containing executables (used to run your CICS / IMS / IDMS regions) ...".
    – Pierre.Vriens
    Commented Aug 31, 2017 at 17:03
  • 1
    One important thing to add is the rise of public repositories like Maven Central etc modulecounts.com - these are often THE supply source for software projects which become more and more assembly srores for these components plus custom glue/frontend code and of course customer specific business logic.
    – Ta Mu
    Commented Aug 31, 2017 at 18:05
  • 1
    never heard of modulecounts.com, the site is down now though, I'll check it later.
    – Newtopian
    Commented Aug 31, 2017 at 18:17
  • 2
    Interesting analogy of fridge to refrigerator :) Commented Sep 5, 2018 at 20:12
  • So how does this differ from a authenticated web server that serves binary files rather than HTML? Why a separate server?
    – anthony
    Commented Jan 14, 2020 at 23:11
27

The way it helped me understand initially, the difference between source code repository and binary repository was to think of it like: * Github or Bitbucket is useful to maintain all 'code' * Jfrog Artifactory is useful to maintain the built 'binary' At least till I was comfortable with these terms!

Also, the importance of Artifactory can be understood in relation to the philosophy of DevOps to "Build once, Deploy always". It goes a long way in Continuous Integration to build your binary once, put it into Artifactory and then call it from there to deploy into all of the different environments. That way, we are sure that the code that works in Dev is the one pushed to Prod and will work there.

1
  • interesting explanation, merci!
    – Pierre.Vriens
    Commented Aug 20, 2018 at 20:46
13

Artifactory is a Binary Repository Manager product from Jfrog.

You're right - being a binary repository manager it is typically used to manage storage of generated and used in the software development process.

From Artifactory's main webpage:

As the first, and only, universal Artifact Repository Manager on the market, JFrog Artifactory fully supports software packages created by any language or technology.

...

...Artifactory provides an end-to-end, automated and bullet-proof solution for tracking artifacts from development to production.

The usages you mentioned suggest it may be popular enough for a generic trademark in DevOps.

8
  • 1
    Merci Dan, you're somehow confirming that an Artifactory is like a combination of the words Artifacts with Repository. The additional question I wonder about is this: what about artifacts that are used in production, but which are not binaries, such as PHP code, CSS files, bash scripts, etc?
    – Pierre.Vriens
    Commented Aug 31, 2017 at 17:03
  • 1
    For application code they have source code versioning systems like cvs, svn, git, mercurial.. And for configuration code, configuration management and distribution systems, like puppet, chef, ansible, salt..
    – Ta Mu
    Commented Aug 31, 2017 at 18:04
  • @Pierre.Vriens I didn't use to think about it this way, somehow "factory" always came to mind first :) But I totally see it now. Thanks! Commented Aug 31, 2017 at 18:20
  • @J.Doe merci for that addition, and just to further extend your comment ... on mainframes they have tools like "ChangeMan ZMF", "Endevor SCM", etc. These tools are used for all the functions you mentioned (versioning, distribution, etc, but also for workflow, security, etc related to all that).
    – Pierre.Vriens
    Commented Aug 31, 2017 at 18:50
  • So if we only reinvent msinframes what could be wrong with them?!
    – Ta Mu
    Commented Aug 31, 2017 at 19:17
11

I think complicating things is what everybody is getting appreciated for nowadays. I will try to answer this question in short .

Source Repository is used for storing code and its versions, while artifactory is used for storing the executable programs that are outputs of those code [ binaries - dll, jar, war, ear, msi, exe files etc.]

Now the reason why you would want to place them separately in a repo which is different from your code could be many - right from secure access, hacking threat, preventing unintentional downloads of malicious/modified jars or to simply have a separate avenue for the clients who will be using your binaries to develop their code.

The technology of SCM could have divulged itself into creating 2 kind of users ( one with developer privileges who will be able to access the source code and another as a client who will just be able to access binaries). But it did not take that route! So now we have artifactories.

2
  • A major reason for a binary storage (whether it is a repository or not) is that you can not create 'text diff patches' of the changes in a binary, as you can for source. That is you can not store 'diff's' to save space and let users see how the text file (or source code) changed. Git for example had major problem with 'versions' of 'formated documents', though I don't know if that is still the case.
    – anthony
    Commented Jan 14, 2020 at 23:24
  • @anthony, Why would you want "text diff patches" in case of executable jars? The whole reason you get to deal with binary is that you dont bother about its code.
    – Spear A1
    Commented Jan 30, 2020 at 18:58
5

An artifact

Is something that is produced/generated/crafted out of a specific process

Jar out of a Java project build.

Question out of your mind

Car out of a factory

New song

A repository

Is a receptacle where things are persisted

Github for a Java project.

StackExchange for your daunting questions

IN THEORY, an Artifact-ory would be a repository of artifact where they are persisted and managed throughout their life cycle.

In the context of DevOps, Artifactory is a product that manages binary artifacts. It stores and manages different types (Jar, Python and npm packages, etc...) that you produce out of your builds and re-use at compile or deployment time.

2
  • interesting explanation, merci!
    – Pierre.Vriens
    Commented Aug 20, 2018 at 20:46
  • ca me fait plaisir!
    – gmolaire
    Commented Aug 21, 2018 at 2:04

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.