jenkins - 如何使用 Jenkins 中的 URL Trigger 插件返回添加到 Jfrog 工件的新工件的确切名称
问题描述
我需要每晚轮询工件 URL 并找出添加了哪个文件,并使用新工件的名称作为参数来触发 Jenkins 中的另一个作业。但是 URLTrigger 插件不返回新工件的名称?有什么方法可以推导出来吗?
解决方案
我使用 groovy 运行 curl 命令来提取和解析 metadata.xml 以计算出 jar 名称。
假设 Artifactory 具有如下所示的元数据内容:
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<groupId>path.to.application</groupId>
<artifactId>jarName</artifactId>
<versioning>
<latest>6.1.12-SNAPSHOT</latest>
<release>6.1.11</release>
<versions>
<version>6.1.11</version>
<version>6.1.12-SNAPSHOT</version>
</versions>
<lastUpdated>20181122121509</lastUpdated>
</versioning>
</metadata>
因此我想要的构建信息是'jarName-6.1.12-SNAPSHOT.jar'
import org.xml.sax.SAXParseException;
//Assumed artifactory path to application.jar
def metaDataPath = 'https://your.artifactory.server/artifactory/path/to/application/jarName/maven-metadata.xml'
//Get the file using curl (you might need to use a proxy), with an api token for authentication
def metadataContent = 'curl -x<your-proxy:80> -H "X-JFrog-Art-Api:<your token>" -XGET ' + metaDataPath
metadataContent = metadataContent.execute().text
//Parse it to get the 'latest' element
def parsedXml = (new XmlParser()).parseText(metadataContent)
println parsedXml.versioning.latest.text() //6.1.12-SNAPSHOT
如果您的快照构建在其名称中包含时间戳,那么您需要使用返回6.1.12-SNAPSHOT
的来构建新的元数据路径:
https://your.artifactory.server/artifactory/path/to/application/jarName/6.1.12-SNAPSHOT/maven-metadata.xml
然后重复提取和解析过程以从子 metadata.xml 中获取带时间戳的名称
推荐阅读
- javascript - 如何将 JSON 对象放入数组中
- django - 无法让 django-db-geventpool 在 Heroku 中工作
- android - 具有存储库模式的 Android MVVM 中的本地/远程数据源
- c++ - 如何测试 lambda 演算?
- python - 为什么我的 discord bot kick 命令不起作用?
- flutter - 如何从文件.xlsx 中获取flutter 中的值(int)?
- node.js - 在 monorepo 中对 NestJs dockerized 应用程序进行 VS 代码调试
- r - 预测多个类别的值
- python - 使用for循环,Python计算数组的方差
- swift - 尝试保存合并的图像,但没有正常工作