如何通过Jenkins动态修改Mule4代理模板pom.xml的artifactId、name及SCM连接
可行解决方案
1. 扩展Maven原型支持SCM参数
Maven原型并非只能修改artifactId和name,你可以自定义参数实现SCM连接的动态替换:
- 编辑原型的
pom.xml,将SCM节点内容替换为占位符:<scm> <connection>${scmConnection}</connection> <developerConnection>${scmDeveloperConnection}</developerConnection> <url>${scmUrl}</url> </scm> - 在原型的
src/main/resources/META-INF/maven/archetype-metadata.xml中添加自定义参数:<requiredProperties> <requiredProperty key="projectName"> <defaultValue>demo-proxy</defaultValue> </requiredProperty> <requiredProperty key="scmConnection"> <defaultValue>scm:git:https://bitbucket.org/your-team/${projectName}.git</defaultValue> </requiredProperty> <requiredProperty key="scmUrl"> <defaultValue>https://bitbucket.org/your-team/${projectName}.git</defaultValue> </requiredProperty> </requiredProperties> - Jenkins作业中执行原型生成命令时传入参数:
mvn archetype:generate -DarchetypeGroupId=your.group.id -DarchetypeArtifactId=proxy-archetype -DarchetypeVersion=1.0.0 -DprojectName=${JENKINS_PROJECT_NAME} -DscmConnection=scm:git:https://bitbucket.org/your-team/${JENKINS_PROJECT_NAME}.git
2. 使用Maven资源过滤生成pom.xml
把模板仓库中的pom.xml改名为pom.xml.template,用占位符标记需替换字段:
<artifactId>${proxy.artifactId}</artifactId> <name>${proxy.name}</name> <scm> <connection>${proxy.scm.connection}</connection> <url>${proxy.scm.url}</url> </scm>
在Jenkins作业中执行以下步骤:
- 从Bitbucket拉取模板仓库代码
- 运行Maven资源过滤命令,指定参数和输出路径:
mvn resources:copy-resources -DresourcesDirectory=. -DoutputDirectory=. -Dproxy.artifactId=${JENKINS_PROJECT_NAME} -Dproxy.name="${JENKINS_PROJECT_NAME} Mule Proxy" -Dproxy.scm.connection="scm:git:https://bitbucket.org/your-team/${JENKINS_PROJECT_NAME}.git" - 将生成的
pom.xml替换原模板文件即可
3. Jenkins Groovy脚本直接修改pom.xml
利用Jenkins内置的Groovy支持,编写脚本直接操作XML节点,灵活性更高:
def projectName = env.JENKINS_PROJECT_NAME // 从Jenkins环境变量获取输入的项目名 def pomFile = new File('pom.xml') def pom = new XmlSlurper().parse(pomFile) // 修改artifactId和name pom.artifactId = projectName pom.name = "${projectName} Mule Proxy" // 修改SCM连接 pom.scm.connection = "scm:git:https://bitbucket.org/your-team/${projectName}.git" pom.scm.url = "https://bitbucket.org/your-team/${projectName}.git" // 保存修改后的pom.xml def writer = new FileWriter(pomFile) new XmlNodePrinter(new PrintWriter(writer)).print(pom) writer.close()
在Jenkins作业中拉取模板仓库后,执行该Groovy脚本即可完成动态修改。
内容的提问来源于stack exchange,提问作者kalbo123
相关产品推荐
相关产品推荐

