tony_tiger
tony_tiger

Reputation: 799

Can Artifactory track run-time dependencies between build-time independent executables?

I just watched an Intro to Artifactory video, and I am trying to evaluate whether it would it would be an appropriate choice for the following situation.

In my org, we are developing a "suite" of software for embedded devices, which need to work together as a system. The building of software for each of these devices is done independently from one another. E.g., I can theoretically compile and generate a release of software for Device A without having any of the source or binaries for Device B. These devices all need to play together as part of an integrated suite, and those interactions are governed and described by ICDs.

Sometimes there are ICD-level changes required or some other important architectural changes that drive related changes to two or more devices' codebases. So this creates what I call "couplings" or inter-dependencies between the executables. E.g., if someone wants to run version 4.5.0 of software for Device A, then Device B must be configured with version of 4.19.0 or greater of its software to maintain compatibility.

We are currently tracking all of these interdependency requirements between executables with spreadsheets and documents on a shared drive, which has gotten cumbersome and annoying.

What I am hoping for is that something like Artifactory would enable us to have a repository of all the executables for the entire suite of software that tracks all of this metadata and linkages between binaries.

So if people decide on the need to run 4.5.0 of software for Device A, but do not have all the detailed knowledge of dependency requirements for the other devices (and in many cases they are not engineers and trying to explain it all to them is difficult), they can do a "checkout" of the entire suite and it would include 4.19.0 of Device B's software. (And if a range of versions of, e.g., Device C software is compatible, grab the latest.)

Sorry if this is a silly question, but I am just learning about JFrog and Artifactory now. (I am also wondering if bintray might be the more appropriate choice...)

Would a Distribution Repository be the way to go about this?

Upvotes: 0

Views: 134

Answers (1)

JBaruch
JBaruch

Reputation: 22923

That's a great question. Actually, more than one. So here are the answers :)

  • is the way to go. It designed to distribute software for devices and supports the metadata that you need (see below).
  • is great for development process - metadata all the way.
  • Distribution Repositories is what you are going to use for releasing distribution-ready artifact

Now let's talk about metadata :)

What you need to relate A version 4.5.0 with B version 4.19.0 and this is done with Artifactory Properties. You can either set them in the CI server during the build, or separately using REST API. Generally, you can introduce some higher level release version and annotate all the components with it (let's say both A:4.5.0 and B:4.19.0 are part of Suite:1.0), or you can express the matrix per artifact (annotating A:4.5.0 with a property Compatible.with=B:4.19.0).

Once set, retrieving them is easy. You can use Artifactory Query Language to get all the components of Suite:1.0, of ask for the latest A artifact that has Compatible.with=B:4.19.0 property on it by using matrix-params resolution.

The good news are that those properties are promoted with the artifacts to when you release them via Distribution Repositories. Then you can configure your devices to consume the correct combinations of artifacts.

Does it make sense?

Upvotes: 3

Related Questions