garci86
garci86

Reputation: 67

Artifactory API AQL with Jenkins environment variables

I try to perform the following code in a postbuild Jenkins task:

curl -H "X-JFrog-Art-Api:***********" -X POST https://artifactory_url/artifactory/api/search/aql -H "Content-Type: text/plain" -d 'items.find({"repo":{"$eq":"REPO"},"name":{"$match":"*${env.SUBSYSTEM}*"},"name":{"$nmatch":"*pdf*"}}).include("repo","name","path")'

(Here it is broken up over several lines for readability):

curl -X POST https://artifactory_url/artifactory/api/search/aql \
     -H "X-JFrog-Art-Api:***********" \
     -H "Content-Type: text/plain" \
     -d 'items.find( \
         {"repo":{"$eq":"REPO"}, \
          "name":{"$match":"*${env.SUBSYSTEM}*"}, \
          "name":{"$nmatch":"*pdf*"}}).include("repo","name","path")'

This is not working because the environment variable ${env.SUBSYSTEM} is not solved. Is there anyway for use variables in curl with the aql?

Thanks and Regards

Upvotes: 0

Views: 600

Answers (1)

BOC
BOC

Reputation: 1699

It's probably not resolving the environment variable because you're wrapping that piece of string in single quotes ('), which preserve the literal value of each character within the quotes (meaning variables aren't resolved). You could use double quotes (") with escaping, which would look like:

... -d "items.find({\"repo\":{\"$eq\":\"REPO\"},\"name\":{\"$match\":\"*${env.SUBSYSTEM}*\"},\"name\":{\"$nmatch\":\"*pdf*\"}}).include(\"repo\",\"name\",\"path\")"

Or possibly just break the environment variable out of the quoting:

... -d 'items.find({"repo":{"$eq":"REPO"},"name":{"$match":"*'${env.SUBSYSTEM}'*"},"name":{"$nmatch":"*pdf*"}}).include("repo","name","path")'

Upvotes: 2

Related Questions