【问题标题】:Artifactory API AQL with Jenkins environment variables带有 Jenkins 环境变量的 Artifactory API AQL
【发布时间】:2018-05-03 14:26:27
【问题描述】:

我尝试在构建后的 Jenkins 任务中执行以下代码:

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")'

(为了便于阅读,这里分为几行):

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")'

这不起作用,因为环境变量${env.SUBSYSTEM} 未解决。无论如何在 curl 中使用 aql 变量?

感谢和问候

【问题讨论】:

    标签: jenkins environment-variables artifactory aql


    【解决方案1】:

    它可能无法解析环境变量,因为您将该字符串包含在单引号 (') 中,这会保留引号内每个字符的文字值(意味着变量未解析)。您可以使用带有转义的双引号 ("),如下所示:

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

    或者可能只是将环境变量从引用中分离出来:

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

    【讨论】:

    • 对对! Thx bto,第二个选项是一个很好的解决方案
    猜你喜欢
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多