我正在考虑监控我的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)的理解是:
使用搜索服务中的AQL功能只能访问底层属性,无法找到它是否是"未知"或不。
items.find({" @ artifactory.licenses":" NOTaLICENSE-1.0"})
将返回我们不正确的工件,而
items.find({"@artifactory.licenses" : "Unknown"})
将不返回我们错误的工件
我正在考虑从用户插件调用REST API,但这不是正确的: - )
欢迎任何想法。这是Artifactory 5.4.6。
答案 0 :(得分:0)
基本上,用于检查许可证的公共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 属性将附加到工件的许可证名称与此列表进行比较变得很容易。