通过jenkins post-groovy脚本写入文件

时间:2012-02-21 18:38:45

标签: groovy hudson jenkins

我想做一些非常简单的事情:通过jenkins groovy post-build script plug-in

创建/写入位于奴隶远程工作区的文件
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)

我没有正确地写文件吗?

3 个答案:

答案 0 :(得分:10)

在写入slave时,您需要先检查通道,然后才能成功创建文件句柄并开始读取或写入该文件:

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
}

希望这有帮助!

答案 1 :(得分:2)

在插件页面(您提供的链接)上搜索单词The post build plugin runs on the manager and doing it as you say will fail if you are working with slaves!,并查看其中的解决方法是否有帮助。

答案 2 :(得分:0)

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

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