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

标签 java git maven grails jenkins

我需要处理部署在多个独立环境中的多个服务器中的多个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/

相关文章:

java - 在 IntelliJ/Tomcat 上使用 Jersey 运行 REST with Java(JAX-RS)

java - 如何禁用 Maven 配置文件?

maven - 无法执行目标 org.apache.maven.plugins :maven-compiler-plugin:3. 8.1:compile (default-compile): Fatal error compiling: invalid target release: 11

maven - 无法将'gpg.exe'识别为内部或外部命令,可操作程序或批处理文件-Maven版本插件

java - 将带有 2 个库的 Eclipse 项目导入到 Android Studio

java - Jersey/JAX-RS 放置、删除幂等性 - 由程序员提供或完成

java - 方法中的变量作用域

git - 如何从另一个分支获取更改

windows - 关于Windows上插件失败的 Gradle

git - Gradle:如何在任务中克隆一个 git repo?