1

Recently, I have had a lecture at my university about advanced testing and CI. To understand all concepts, I was searching what artifact represents, specifically in DevOps sphere. I found many contradictory statements, definitions, and articles.

Therefore, I would like to ask, if there is a standard (or at least some unwritten rules) of what everything could be considered as an artifact. What are the most important parts of artifact which should always be included?

Many sources say that artifact should not be source code, but deliverable, and JDK is often used as an example. In that case, I would like to know what is the equivalent when working with scripting languages like JavaScript or Python.

Thank you for all your explanations!

2

Artifact is an abstraction. It could be anything that's produced by somebody else. In Bulgaria for example we're making artifacts for the winter time ( it's called 'compot') . Basically it's an artifact, it was produced by my grandmother and could be used by me :)

Same goes into the IT world, but with one small difference.

The Java artifacts are a little bit more special, since Java is a static language and before the run phase you would have those compiled artifacts - *.jar files. After that you could reference them during the 'run' phase. This is the reason why they are always pointed as the most straightforward artifact example, the java compiler will produce them.

One major distinguishment between my grandmother's artifacts and Java's ones is that it's a good practice to have a version for each artifact, that way you could easily switch them and see what works and what does not.

JavaScript and Python are dynamic languages, they do not have any compiled artifacts like Java, you could just refer to the '.py' file.

As a summary an artifact could be anything: from tar.gz to a jar file, but it must always be versioned :) Of course the versioning might come during a later stage, like a docker image tag, but the principle still remains.

| improve this answer | |
  • Thanks for explanation. So you are saying that there is no standard and artifact can be anything the team decides to include. This is weird because as a beginner in this field I have no clue what everything I should include. Are there some major things I should always include? Could you make some list of what you usually include, please? thanks! – Michal Moravik Apr 7 at 8:19
  • It's not that the team decides. It's not an official definition that the team must agrees on. An artifact could be anything that's produced by a process ( like a pipeline, or a java compiler or a docker build ). As a beginner the best thing you could start is managing abstraction, not to look for anything concreted. – Recoba20 Apr 7 at 8:25
  • 1
    @MapeSVK Examples of different things that were seen as artifacts, from real projects I have participated in: A plain jar file with java classes in them. A jar file with source code inside. An eclipse plugin. An eclipse product. A zip containing an update site for said product/plugin. A zip file containing machine learning models. A (maybe generated) Dockerfile. A Docker Image. A conan recipe for building some package. A binary build of said package. Yes, the artifact can also be called deliverable, but don't forget that sometimes the source code is the deliverable! – kutschkem Apr 7 at 16:04
  • @kutschkem Now I have much better image in my head, thank you for your comment! – Michal Moravik Apr 7 at 17:16

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