我需要处理几个独立环境中部署在多个服务器上的几个war文件。我们使用Jenkins来构建战争,这些战争是由Grails根据从git repo下载的代码生成的。战争部署在tomcat中。 tomcat管理页面显示"显示名称"为每场战争。我想在构建时使用一些构建标识符修改该显示名称,因此我可以从所有tomcat服务器轮询显示名称,并检测是否存在任何版本不同步的战争。
我承认&#34;显示名称&#34;在<display-name>
文件中的WEB-INF/web.xml
标记之间设置。
所以我的问题是:生成战争后是否有任何Jenkins插件可以修改web.xml
<display-name>
值?或者我可以用来修改给定war文件的特定值的任何现有工具? (所以我可以从Jenkins运行它作为最后一个构建步骤,将其设为BUILD_ID
)。当然欢迎任何其他选择。
答案 0 :(得分:1)
使用application.properties
和环境名称中的信息生成显示名称。基本上它是这样生成的:"${app.name}-${env.name}-${app.version}"
。您可以在编辑之前修改名称和版本,在Jenkins中添加构建步骤。
E.g。我们使用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}")
}
答案 1 :(得分:0)
根据文章中的步骤,在2.5.0中对我来说并不是很好。所以我发现_Events.groovy效果很好:
eventWebXmlStart = { webXmlFile ->
ant.echo message: "Change display-name for web.xml"
def tmpWebXmlFile = new File(projectWorkDir, webXmlFile)
ant.replace(file: tmpWebXmlFile, token: "${grailsAppName}-${grailsEnv}-${grailsAppVersion}",
value: "${grailsAppName}")
}
不需要安装模板的步骤