gpt4 book ai didi

java - 使用 Jenkins 在构建时修改 web.xml 中的

转载 作者:行者123 更新时间:2023-12-01 11:56:59 25 4
gpt4 key购买 nike

我需要处理部署在多个独立环境中的多个服务器中的多个war文件。我们使用 Jenkins 构建 war ,这些 war 是由 Grails 根据从 git 存储库下载的代码生成的。 war 部署在tomcat中。 tomcat管理页面显示每个war的“显示名称”。我想在构建时使用构建的某些标识符修改该显示名称,这样我就可以从所有 tomcat 服务器轮询显示名称,并检测是否存在版本不同步的任何冲突。

据我了解,“显示名称”设置在 <display-name> 之间WEB-INF/web.xml 中的标签文件。

所以我的问题是:有没有Jenkins插件可以修改web.xml <display-name> war 后产生的值(value)?或者我可以使用任何现有工具来修改给定 war 文件的特定值? (所以我可以从 Jenkins 运行它作为最后一个构建步骤,并将 BUILD_ID 传递给它)。当然,欢迎任何其他选择。

最佳答案

显示名称是使用application.properties中的信息和环境名称生成的。基本上它是这样生成的:“${app.name}-${env.name}-${app.version}”。您可以在编译之前修改名称和版本,在 Jenkins 中添加构建步骤。

例如我们使用 Gant 脚本添加从 Mercurial 中提取的额外信息,以构建应用程序的名称和版本。这是我们的脚本:

// File: scripts/PrepareApplicationProperties.groovy
target(prepareApplicationProperties: "set application properties") {
def buildNumber = metadata.'app.number' = System.getenv('BUILD_NUMBER') ?: "0"
metadata.'app.mercurialRevision' = System.getenv('MERCURIAL_REVISION') ?: "0"
def mercurialRevisionNumber = metadata.'app.mercurialRevisionNumber' = System.getenv('MERCURIAL_REVISION_NUMBER') ?: "0"
metadata.'app.version' = metadata.'app.version' + ".$buildNumber.$mercurialRevisionNumber"
metadata.persist()
}
setDefaultTarget(prepareApplicationProperties)

Haki 先生提出了更通用的解决方案: http://mrhaki.blogspot.com.au/2011/02/grails-goodness-one-war-to-rule-them_4229.html因为他直接操作web.xml

// File: scripts/_Events.groovy
eventWebXmlStart = { webXmlFile ->
ant.echo message: "Change display-name for web.xml"
def tmpWebXmlFile = new File(projectWorkDir, webXmlFile)
ant.replace(file: tmpWebXmlFile, token: "@grails.app.name.version@",
value: "${grailsAppName}-${grailsAppVersion}")
}

关于java - 使用 Jenkins 在构建时修改 web.xml 中的 <display-name>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28375510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com