Grails 3.x 和 Jenkins : Save BUILD_NUMBER and date when deploying

标签 grails jenkins groovy deployment build

我有一个使用 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/

相关文章:

使用 OpenJDK 1.6 构建 war 时,Grails 1.3.9 和 grails-melody : javamelody. jar 未打包

Grails 加载数据一次

Grails spring security rest 注入(inject) tokenGenerator

java - 由于 jenkins 中的本地修改,Maven 发布插件中止准备

python - Jenkins 构建因修订错误而失败

jenkins - 让 Jenkins 忽略 stderr 的方法?

grails - 无法找到 java 编译器 com.sun.tools.javac.Main,请更改您的类加载器设置

search - Grails可搜索的搜索BigDecimal范围

java - 如何将 opencsv 与我的 Collection (列表)一起使用?

Groovy 从文件中获取变量。变量=值