【问题标题】:AQL build domain object does not return resultsAQL 构建域对象不返回结果
【发布时间】:2017-02-15 23:24:57
【问题描述】:

我遇到了一个问题,在使用 AQL 时,我无法让我对构建域对象进行的任何查询返回

当我做出以下卷曲时:

curl -X GET -H "X-JFrog-Art-Api: myArtifactroyKey" -H "Cache-Control: no-cache" "https://MyArtifactoryServer/artifactory/api/build/"

我得到一组结果:

{
  "builds": [
    {
      "uri": "/someBuild",
      "lastStarted": "2017-02-15T22:02:49.066+0000"
    },
    {
      "uri": "/someOtherBuild",
      "lastStarted": "2017-02-15T21:45:09.590+0000"
    }, 
      "uri": "/someThirdBuild",
      "lastStarted": "2017-02-15T21:17:38.794+0000"
    }
],
  "uri": "https://myArtifactoryServer/artifactory/api/build"
}

所以我知道我的 Artifactory 中有构建

但是,当我进行以下 curl 时,我认为它会请求所有具有任何名称的构建,但我没有得到任何结果

curl -X POST -H "X-JFrog-Art-Api: myArtifactroyKey" -H "Content-Type: application/x-www-form-urlencoded" -H "Cache-Control: no-cache" -d 'builds.find({"name": {"$match":"*"}})' "https://MyArtifactoryServer/artifactory/api/search/aql"

返回:

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

我在使用 items.find() 时能够获得结果,但使用 builds.find() 时没有任何运气,我有什么遗漏吗?

我的总体意图是有一个查询,它根据名称返回特定构建的最新构建信息,但我什至无法针对构建域对象进行最简单的查询。

提前感谢您的帮助。

【问题讨论】:

  • 我尝试运行您的查询(更改 API 密钥和 MyArtifactoryServer),它就像一个魅力。您可以检查 Artifactory 中的 request.log 并分享与此查询相关的日志行吗?另外,您使用的是管理员用户吗?如果没有,您可以尝试使用管理员用户,看看是否有变化?
  • 解决方法可以在stackoverflow.com/questions/51175439/…找到

标签: artifactory artifactory-query-lang


【解决方案1】:

答案可能与权限有关。如果您使用的 API 密钥属于非管理员用户,则无法解释这种情况。
使用 AQL 查询构建域需要管理员权限,而“All Builds”API 只需要特权用户。

【讨论】:

  • 我发现上面的查询只有在用户有“管理员”权限的情况下才有效。我可以理解该查询需要特权用户,但令我惊讶的是它需要最高级别的特权。这可能是对的吗?有没有不同的方式来获取相同的信息而不需要如此强大的权限设置?
  • 关于 AQL 查询,这是当前的情况。某些 AQL 域仅限管理员访问。
  • 当用户权限不足时/api/search/aql API 没有通过返回适当的 HTTP 错误状态来说明这一点的缺陷(此处适合使用 403 Forbidden);奇怪的是(可能更重的)fetch-all /api/build 被允许,而更窄的 AQL 查询则不允许;令人沮丧的是/api/build 本身不支持任何过滤。
猜你喜欢
  • 2021-07-05
  • 2015-04-30
  • 2013-06-23
  • 2023-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多