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

Monitoring invalid license information in Artifactory repositories with a user plugin

我正在考虑监控我的 Artifactory 以获取无效的许可信息。换句话说,我想知道存储库是否上传了带有与其中一个注册许可证不匹配的许可证信息(属性 artifactory.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()

有一个public REST API 搜索license information 可以用来检测license information 既不是approved也不是unapproved,貌似符合要求,找到不正确的神器:

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 public API.

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

将 return 我们不正确的工件,而

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

不会不会return我们不正确的神器

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

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

所以有一个现有的用户插件让我走上了正确的轨道:https://github.com/JFrogDev/artifactory-user-plugins/blob/master/governance/discoverLicenseAndPreventUnapproved/discoverLicenseAndPreventUnapproved.groovy

基本上,用于检查许可证的 public 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

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

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