1

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

使用工件客户端 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 可用于搜索许可证信息,该 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。

4

1 回答 1

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属性将附加到工件的许可证名称与此列表进行比较变得容易。

于 2017-09-06T12:25:17.723 回答