2012-02-21 54 views
4

我想要做的東西很簡單:創建/寫入通過詹金斯位於從遠程工作區文件groovy post-build script plug-in寫經詹金斯後Groovy腳本到文件上從

def props_file = new File(manager.build.workspace.getRemote() + "/temp/module.properties") 

def build_num = manager.build.buildVariables.get("MODULE_BUILD_NUMBER").toInteger() 

def build_props = new Properties() 
build_props["build.number"] = build_num 

props_file.withOutputStream { p -> 
    build_props.store(p, null) 
} 

的最後一行失敗,因爲該文件不存在。我想它是與指向主執行人,而不是遠程工作區輸出流,但我不知道:

Groovy script failed: 

java.io.FileNotFoundException: /views/build_view/temp/module.properties (No such file or directory) 

我不是寫正確的文件嗎?

回答

2

該插件頁面(到您所提供的鏈接,)的話The post build plugin runs on the manager and doing it as you say will fail if you are working with slaves!搜索,看看解決方法有幫助。

+0

必須有一種更優雅的方式,而不是像這樣的情況下定義env var。 想到這可能是我需要的:http://javadoc.jenkins-ci.org/hudson/FilePath.html – 2012-02-21 19:20:16

+1

解決方法是事後纔想到的。關鍵是它在主人身上運行,你從那裏出發。 – 2012-02-21 19:38:29

0

文件夾/views/build_view/temp是否存在?

如果沒有,您需要做new File("${manager.build.workspace.remote}/temp").mkdirs()

+0

它確實存在。我只是不確定outputStream在哪裏被寫入(主或從?) – 2012-02-21 19:14:18

10

在寫上你需要先檢查通道,然後才能成功創建文件句柄,並開始讀取或寫入該文件從:

if(manager.build.workspace.isRemote()) 
{ 
    channel = manager.build.workspace.channel; 
} 

fp = new hudson.FilePath(channel, manager.build.workspace.toString() + "\\test.properties") 

if(fp != null) 
{ 
    String str = "test"; 
    fp.write(str, null); //writing to file 
    versionString = fp.readToString(); //reading from file 
} 

希望這有助於!

+0

而不是\\ test.properties您需要添加/test.properties,因爲它給出一個IOException – despot 2015-09-25 16:05:21

+0

如果作業不是遠程的,將不會有通道 – jeremyjjbrown 2016-02-02 15:27:03