使用用户插件监控 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) 的理解是:
- 使用搜索服务 http://repo.jfrog.org/artifactory/oss-releases-local/org/artifactory/artifactory-papi/5.4.4/artifactory-papi-5.4.4-javadoc.jar!/org/artifactory/search/Searches.html) 无法使用类似于 REST 上可用的许可证搜索。
使用搜索服务的 AQL 功能只能访问底层 属性,无法确定它是否 "Unknown"。
items.find({"@artifactory.licenses" : "NOTaLICENSE-1.0"})
将 return 我们不正确的工件,而
items.find({"@artifactory.licenses" : "Unknown"})
不会不会return我们不正确的神器
- 注册许可证列表中没有 API 到 return。因此,没有可编写脚本的方法来将 属性 artifactory.licenses 中的值与已注册的许可证
相匹配
我正在考虑从用户插件调用 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 属性 附加到工件的许可证名称与此列表进行比较。
我正在考虑监控我的 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) 的理解是:
- 使用搜索服务 http://repo.jfrog.org/artifactory/oss-releases-local/org/artifactory/artifactory-papi/5.4.4/artifactory-papi-5.4.4-javadoc.jar!/org/artifactory/search/Searches.html) 无法使用类似于 REST 上可用的许可证搜索。
使用搜索服务的 AQL 功能只能访问底层 属性,无法确定它是否 "Unknown"。
items.find({"@artifactory.licenses" : "NOTaLICENSE-1.0"})
将 return 我们不正确的工件,而
items.find({"@artifactory.licenses" : "Unknown"})
不会不会return我们不正确的神器
- 注册许可证列表中没有 API 到 return。因此,没有可编写脚本的方法来将 属性 artifactory.licenses 中的值与已注册的许可证 相匹配
我正在考虑从用户插件调用 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 属性 附加到工件的许可证名称与此列表进行比较。