Groovy 使用用户插件监视Artifactory存储库中的无效许可证信息

Groovy 使用用户插件监视Artifactory存储库中的无效许可证信息,groovy,artifactory,artifactory-query-lang,Groovy,Artifactory,Artifactory Query Lang,我正在研究监视我的人工制品是否有无效的许可证信息。换句话说,我想知道存储库中是否上载了与其中一个已注册许可证(管理->配置>许可证)不匹配的许可证信息(property artifactory.licenses)项 使用artifactory客户端api创建类似这样的工件的简单测试用例是: File result = artifactory .repository("sandbox") .upload("com/google/guava/guava/14.0.1/

我正在研究监视我的人工制品是否有无效的许可证信息。换句话说,我想知道存储库中是否上载了与其中一个已注册许可证(管理->配置>许可证)不匹配的许可证信息(property artifactory.licenses)项

使用artifactory客户端api创建类似这样的工件的简单测试用例是:

File result = artifactory
        .repository("sandbox")
        .upload("com/google/guava/guava/14.0.1/guava-14.0.1.jar", jarFile)
        .withProperty("artifactory.licenses", "NOTaLICENSE-1.0")
        .doUpload()
有一个公共REST API可用于搜索许可证信息,该信息可用于检测未经批准或未经批准的许可证信息,并且似乎符合要求并查找不正确的工件:

curl -u "admin:password" -X GET  "http://artifactory_server/artifactory/api/search/license?unapproved=0&approved=0"
{
  "results" : [ {
    "uri" : "http://artifactory_server/artifactory/sandbox/com/google/guava/guava/14.0.1/guava-14.0.1.jar",
    "license" : "Unknown",
    "found" : "",
    "status" : "Unapproved"
  } ]
}
然而,我更愿意使用用户插件(请参阅)来实现这一点,但我不知道如何从ArtifactoryPublicAPI获得相同的信息

经过一些测试,我目前对公共API(artifactory papi)的理解是:

  • 类似于REST上可用的许可证搜索不可使用搜索服务)
  • 使用Searchs服务中的AQL功能只能访问底层属性,无法确定它是否“未知”

    items.find({“@artifactory.licenses”:“notaliense-1.0”})

将返回我们不正确的工件

items.find({"@artifactory.licenses" : "Unknown"})
不会返回我们不正确的工件

  • 没有用于返回已注册许可证列表的API。因此,没有可编写脚本的方法将属性artifactory.licenses中的值与已注册的许可证进行匹配
我正在考虑从用户插件调用RESTAPI,但这不可能是正确的:-)


欢迎任何意见。这是在Artifactory 5.4.6中实现的。

因此有一个现有的用户插件让我走上了正确的道路:

基本上,检查许可证的公共RESTAPI依赖于名为org.artifactory.addon.license.service.InternalLicenseService的服务

除其他方法外,此服务还提供一种列出服务器上所有已声明许可证的方法

// Beware - Internal API of an addon - from artifactory-addon-license-5.4.6.jar
def licensesService = ctx.beanForType(forName('org.artifactory.addon.license.service.InternalLicensesService'))
def allLicenseInfos = licensesService.artifactLicensesInfo.licenses
def artifactLicenses = allLicenseInfos*.name
此代码段返回在artifactoryui中声明的所有许可证名称的列表


之后,通过artifactory.licenses属性将附加到工件的许可证名称与此列表进行比较就变得很容易了。

因此有一个现有的用户插件让我走上了正确的道路:

基本上,检查许可证的公共RESTAPI依赖于名为org.artifactory.addon.license.service.InternalLicenseService的服务

除其他方法外,此服务还提供一种列出服务器上所有已声明许可证的方法

// Beware - Internal API of an addon - from artifactory-addon-license-5.4.6.jar
def licensesService = ctx.beanForType(forName('org.artifactory.addon.license.service.InternalLicensesService'))
def allLicenseInfos = licensesService.artifactLicensesInfo.licenses
def artifactLicenses = allLicenseInfos*.name
此代码段返回在artifactoryui中声明的所有许可证名称的列表

之后,通过artifactory.licenses属性将附加到工件的许可证名称与此列表进行比较变得很容易