我必须在不使用外部数据库的情况下从正在运行的应用中显示一些部署级别参数。第一个是战争建立日期时间。有没有办法让我的tomcat部署grails应用程序知道什么时候构建?
此外,我们有什么方法可以指定战争的提交修订,然后可以由应用程序读取?读取修订版号的脚本是外部任务,但我关心的是在自动构建战争时传递此值,并在部署时读取应用程序。
答案 0 :(得分:1)
您可以通过scripts/_Events.groovy
添加eventCreateWarStart
来完成此操作。最终的webapp内容已经在暂存目录中组装之后但在压缩它们以进行WAR之前触发此事件。您可以在暂存目录中创建新文件,以将它们包含在WAR中。例如:
eventCreateWarStart = { warName, stagingDir ->
ant.exec(executable:'read-revision-number',
output:"${stagingDir}/WEB-INF/classes/revision.txt") {
arg(value:'any-argument-the-script-needs')
}
}
这将运行脚本并将其输出放入WAR中,您可以使用AnyClassInYourApplication.getResource("/revision.txt")
从代码中读取它。
通过添加类似
的内容,您可以使用完全相同的构建时间原则new File(stagingDir, "WEB-INF/classes/build.timestamp").text = "${new Date()}"
在eventCreateWarStart
。
如果您想要非常聪明,请让您的脚本以与Java兼容的“属性”格式文件输出详细信息,例如
my.app.revision=123456
my.app.build.timestamp=Fri Nov 01 14:25:30 GMT 2013
然后在您的应用中Config.groovy
将classpath:build-details.properties
添加到grails.config.locations
,然后通过grailsApplication.config
提供详细信息。
答案 1 :(得分:0)
以上答案适用于grails2,但是任何寻找grails 3解决方案的人都可以使用buildProperties任务
#!/bin/bash
# Check if the number of lines is greater than 3
commit_msg_file="${1}"
minimum_lines=3
num_lines=$(wc -l "${commit_msg_file}" | cut -f1 -d' ')
if (( $num_lines < $minimum_lines )); then
echo >&2 "Error!"
exit 1
fi
它将在meta-info / grails.build.info文件中加入战争
相同的方法可用于git提交或任何其他细节。
请参阅此文How to add build date and other custom information to grails war