2015-11-25 92 views
1

在我的應用程序中,用戶可以選擇上傳war文件來更新軟件。獲取版本信息並從grails war文件構建數據

我想在部署到我的服務器之前從戰爭文件中獲取一些版本信息。我怎樣才能做到這一點?

這些信息會爲我有用:

def jversion=[ 
       "buildDate": grailsApplication.metadata["build.date"], 
       "version": grailsApplication.metadata["app.version"], 
       "branch": grailsApplication.metadata["GIT_BRANCH"], 
       "buildNumber": grailsApplication.metadata["build.number"], 
       "gitCommit": grailsApplication.metadata["GIT_COMMIT"] 

     ] 

我可以從戰爭文件,以及如何獲取什麼樣的信息?

最好的問候, 彼得

回答

3

爲了這個目的,你可以將腳本添加到Grails應用程序,增加了這些信息,只要用戶建立戰爭的文件。在名爲_Events.groovy的grails應用程序的./scripts下創建一個新的腳本文件。在這裏,您可以勾選不同的Grails事件,這些事件在應用程序啓動或構建戰爭時觸發。

戰爭一旦建成,您就可以使用eventCreateWarStart事件記錄信息。以下是一些可幫助您入門的示例代碼。它從本地git獲取當前分支名稱和提交標識,並將數據存儲到名爲application.properties的文件中。

eventCreateWarStart = { warName, stagingDir -> 
    addBuildInfo("${stagingDir}/application.properties") 
} 

private void addBuildInfo(String propertyFile) { 
    def jVersion = [ 
      "appName" : grailsApp.metadata['app.name'], 
      "version" : grailsApp.metadata["app.version"], 
      "buildDate" : new Date(), 
      "branch"  : getBranch().trim(), 
      "Commit"  : getRevision().trim(), 
      "buildNumber": System.getProperty("build.number", "CUSTOM"), 
    ] 

    File file = new File(propertyFile) 
    file.text = "" 
    jVersion.each { 
     key, value -> 
      file.text += "${key}:\t${value}\n" 
    } 

} 

def getBranch() { 
    Process process = "git rev-parse --abbrev-ref HEAD".execute() 
    process.waitFor() 
    return process.text ?: 'UNKNOWN' 
} 

def getRevision() { 
    Process process = "git log --oneline --no-abbrev-commit -1".execute() 
    process.waitFor() 
    return process.text ?: 'UNKNOWN' 
} 

plugin還聲稱來從哈得遜/詹金斯生成屬性,如果被用於建立戰爭,他們一個Grails。

1

Grails 3.0.9,在GSP中,您可以從META-INF文件中獲取信息。試試這些

${grails.util.Metadata.current.getApplicationVersion()} 
${grails.util.Metadata.current.getEnvironment()} 
${grails.util.Metadata.current.getApplicationName()} 

但我不知道如何獲取生成日期信息。

0

Grails的3,你可以使用buildProperties任務的任何添加自定義信息戰,如創建日期,其它版本信息,git的修訂等

buildProperties { 
    inputs.property("info.app.build.date", new Date().format('yyyy-MM-dd HH:mm:ss')) 
} 

請參閱本文的如何做同樣的http://nimavat.me/blog/grails3-add-custom-build-info-to-war