Search code examples
artifactoryartifactory-query-lang

Artifactory aql: find builds of job with given property


I am trying to query which build number(s) produced artifacts from build foo with artifact property vcs.Revision=aabbccddee123456.

In Artifactory 5.1.3.

I was trying like this so far:

curl -u user:apikey -i -X POST https://artifactory.foobar.com/artifactory/api/search/aql -H "content-type:text/plain" -T query.json

query.json:

builds.find(
{
  "module.artifact.item.repo":"snapshot-local",
  "name":"foo",
  "[email protected]":"aabbccddee123456"
}
)

However, none of these 3 lines seem individually correct:

  • builds.find({"module.artifact.item.repo":"snapshot-local"}) returns nothing,

  • builds.find({"name":"foo"}) returns the same empty response,

  • builds.find({"[email protected]":"aabbccddee123456"}) also returns this:

{ "results" : [ ], "range" : { "start_pos" : 0, "end_pos" : 0, "total" : 0 } }

What am I doing wrong here? I do see in the webapp the builds I published with this name, and with the correct artifact properties.


Solution

  • Here's a working solution that will give build numbers (since giving admin rights to query builds is not a solution for us):

    query.json:

    items.find(
    {
      "repo":"snapshot-local",
      "artifact.module.build.name":"foo",
      "[email protected]":"aabbccddee123456"
    }
    ).include("artifact.module.build.number")
    

    This returns a list of all the artifacts that were built with the relevant properties, with the build number attached, e.g:

    {
    "results" : [ {
      "repo" : "snapshot-local",
      "path" : "foo/42",
      "name" : "a.out",
      "type" : "file",
      "size" : 123456789,
      "created" : "2018-07-05T12:34:56.789+09:00",
      "created_by" : "jenkins",
      "modified" : "2018-07-05T12:34:56.789+09:00",
      "modified_by" : "jenkins",
      "updated" : "2018-07-05T12:34:56.789+09:00",
      "artifacts" : [ {
        "modules" : [ {
          "builds" : [ {
            "build.number" : "42"
          } ]
        } ]
      } ]
    },
    [SNIP]
    }
     ],
    "range" : {
      "start_pos" : 0,
      "end_pos" : 30,
      "total" : 30
    }
    }
    

    I can then parse this to extract build.number.