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

时间:2017-08-24 12:31:28

标签: groovy artifactory artifactory-query-lang

我正在考虑监控我的Artifactory以获取无效的许可证信息。换句话说,我想知道存储库是否上传了带有许可证信息(属性 artifactory.licenses )的项目,这些项目与注册的许可证之一不匹配( Admin - > Configuration >许可证

使用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"
  } ]
}

但是,我更愿意使用用户插件执行此操作(请参阅https://www.jfrog.com/confluence/display/RTF/User+Plugins),但我不知道如何从Artifactory公共API获取相同的信息。

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

将返回我们不正确的工件,而

items.find({"@artifactory.licenses" : "Unknown"})

返回我们错误的工件

  • 没有API可以返回已注册许可证的列表。因此,没有可编写脚本的方法来匹配属性 artifactory.licenses 中的值与已注册的许可证

我正在考虑从用户插件调用REST API,但这不是正确的: - )

欢迎任何想法。这是Artifactory 5.4.6。

1 个答案:

答案 0 :(得分:0)

因此,现有的用户插件让我走上正轨:https://github.com/JFrogDev/artifactory-user-plugins/blob/master/governance/discoverLicenseAndPreventUnapproved/discoverLicenseAndPreventUnapproved.groovy

基本上,用于检查许可证的公共REST API取决于名为 org.artifactory.addon.license.service.InternalLicensesService

的服务。

此服务提供了一种列出服务器上所有已声明许可证的方法。

// 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

此代码段返回Artifactory UI中声明的许可证的所有名称列表。

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