【发布时间】:2018-08-07 06:40:17
【问题描述】:
我有一个使用 Maven 构建的 Spring 应用程序。 Jenkins 声明式管道正在用于实现 CI/CD。
我希望我的 Jenkinsfile 尽可能通用,利用 POM 及其父 POM 中已有的内容。我们使用自定义 Super POM 来集中元数据,例如我们的 Artifactory 存储库 (distributionManagement />)、SonarQube 服务器和其他一些有价值的属性。
我已经在使用 readMavenPom().getParent().getGroupId() 来获取我们公司的标准 groupId 以及 readMavenPom().getArtifactId()、readMavenPom().getVersion() 和 readMavenPom().getPackaging()。
我想访问元数据,以便将其用于将二进制文件发布到 Artifactory 的管道步骤。
查看Parent class,我没有看到distributionManagement 标记的任何getter。我确实在ModelBase 下看到它。
如何从 Jenkinsfile 访问这些详细信息?
谢谢
【问题讨论】:
-
我会检查
readMavenPom().getDistributionManagement()参见 maven.apache.org/components/ref/3.3.9/maven-model/apidocs/org/…(从 ModelBase 继承的东西)...我在 ModelBase 下看到它 maven.apache.org/components/ref/3.3.9/maven-model/apidocs/org/… -
我已经试过了。由于我的 POM 不包含 distributionManagement 标记(因为数据是从父 POM 继承的),所以它返回 null。
-
啊..好的。所以继承在詹金斯中不可用,这会变得有点困难..首先你想做什么?你能详细说明一下吗?您在获取公司 groupId 什么?
-
事实上,我需要获取 distributionManagement 标签来获取 Artifactory 存储库(发布和快照)。它们被添加到 Super POM 是为了尽可能地重用代码并避免在不同的项目中一遍又一遍地重复这个标签。这同样适用于 groupId。它总是一样的,所以为了简单和重用,它现在位于我们的父 POM 中。
-
重点是继承解决方案仅在 Maven 本身中完成,而不在 Jenkins 中完成...您可以尝试通过
mvn -N help:effective-pom -Doutput=result.xml... 并给readMavenPom('result.xml')一个参数?
标签: maven jenkins jenkins-pipeline