我有一个使用 Jenkins 构建和部署的 Grails 3.1 应用程序。现在我正在寻找一种方法来保存 BUILD_NUMBER以及我的 Grails 应用程序中的其他几个变量,以便稍后在 GSP 中显示它们。
我找到了this tutorial/code snippet但它似乎只适用于 Grails 2.x 应用程序?我还考虑了 Grails 3.x 应用程序中“_Events.groovy”文件的“src/main/scripts”文件夹的新位置。
任何人都可以帮助我将内部版本号和日期动态获取到我的 grails 应用程序中以显示它们,例如在页脚?
谢谢!
最佳答案
Grails 2.x 构建系统基于 Gant .当给定的 gant 脚本执行时,它可以触发某些事件,您可以 Hook 并提供自定义行为。一个这样的事件是 eventCreateWarStart
,这就是 _Events.groovy
脚本在您提供的链接中。
Grails 3.x 使用 Gradle 作为构建系统。因此,任何以前存在的 Gant 脚本都必须转换为使用 Gradle。
显现
要执行类似于您提供的链接的操作,即附加 Implementation-Build-Number
属性到 list 文件,您需要将其添加到您的 Grails 3 项目的 build.gradle
文件:
task addBuildNumber() {
def unknownValue = 'UNKNOWN'
def buildNumberEnvironment = 'BUILD_NUMBER'
def buildNumberProperty = 'build.number'
def buildNumber = System.getenv(buildNumberEnvironment)
if (!buildNumber) {
buildNumber = System.getProperty(buildNumberProperty, unknownValue)
}
war {
manifest { attributes "Implementation-Build-Number": buildNumber }
}
}
tasks.war.dependsOn(addBuildNumber)
我们是 defining a custom task调用
addBuildNumber
并配置现有的 war
依赖的任务addBuildNumber
当它被调用时。 addBuildNumber
任务尝试检索内部版本号并将其附加到 war list 。意见
在 View 中获取内部版本号和其他变量有点不同。要使其正常工作,您需要将所有您感兴趣的变量添加到
application.yml
文件。让我们将带有占位符的内部版本号添加到已经存在的元数据中:info:
app:
name: '@info.app.name@'
version: '@info.app.version@'
grailsVersion: '@info.app.grailsVersion@'
build-number: '@info.app.build-number@'
然后你需要在你的页脚 gsp 页面中使用
<g:meta>
tag 渲染它。 name
是来自 application.yml
的配置属性:<footer>
<span class="build-number"><g:meta name="grails.info.app.build-number"/></span>
</footer>
最后,您需要更换
@info.app.build-number@
application.yml
中的占位符作为构建过程的一部分,我们将配置现有的 processResources
通过将以下内容添加到 build.gradle
来完成任务:processResources {
def unknownValue = 'UNKNOWN'
def buildNumberEnvironment = 'BUILD_NUMBER'
def buildNumberProperty = 'build.number'
def buildNumber = System.getenv(buildNumberEnvironment)
if (!buildNumber) {
buildNumber = System.getProperty(buildNumberProperty, unknownValue)
}
filter(ReplaceTokens, tokens: ['info.app.build-number': buildNumber])
}
来自 Gradle documentation ,
When you use the ReplaceTokens class with the “filter” operation, the result is a template engine that replaces tokens of the form “@tokenName@” (the Apache Ant-style token) with a set of given values.
关于Grails 3.x 和 Jenkins : Save BUILD_NUMBER and date when deploying,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36326388/