使用java.io.file的jenkins管道始终引用主管道

使用java.io.file的jenkins管道始终引用主管道,java,file,jenkins,shared-libraries,Java,File,Jenkins,Shared Libraries,我有一个詹金斯管道 @Library('sharedLib@master') import org.foo.point pipeline { agent { label 'slaveone' } // agent { label 'master' } stages { stage('Data Build'){ steps{ script{ def Point =

我有一个詹金斯管道

@Library('sharedLib@master') 
import org.foo.point

pipeline {
    agent { label 'slaveone' }
//  agent { label 'master' }
    stages {
        stage('Data Build'){
            steps{
                script{
                    def Point = new point()
                    Point.hello("mememe")
                }
            }
        }
    }
}
它在一个名为“jenkins共享库/src/sharedLib”的库中运行一小段代码

package org.foo

import java.io.File
class point{
    def hello(name){
        File saveFile = new File("c:/temp/jenkins_log.txt")
        saveFile.write "hello"
    }
}
它在“master”和“slaveone”上都可以正常运行,但在这两种情况下,“jenkins_log.txt”文件都会出现在master上。日志文件包含以下内容:

在d:\Jenkins\u WorkDir\workspace\mypipeline中的slaveone上运行

这段代码如何在slaveone上运行并将文件写入master


编辑:我还应该提到,这是我第三次尝试这样做。第一个是在管道中直接使用Groovy代码,第二个是在vars目录中使用“def”类型调用。两者都产生了相同的行为,似乎对运行它的代理一无所知。

Jenkins只在master上存储所有日志,这就是为什么在节点上找不到任何日志。

我认为脚本中的所有内容都在master上运行,但在这里,我找到了一个解决方法:

如果您能解释为什么需要在从属服务器上创建文件,这可能会有所帮助。如果有两个阶段,一个是创建文件,另一个是读取文件,我的期望是,无论运行这些阶段的节点是什么,读取都会成功。我们公司的政策是,任何作业都不应该在主节点上运行,所有管道都应该只在从节点上运行(在大多数情况下,这些将是Docker容器,仅在管道期间旋转)。虽然存在“写入”和“读取”过程,但这两个过程都发生在master上。我将此示例作为最低可行代码生成。然后,您可以尝试
sh“echo hello>jenkins_log.txt”
,这将在slave上运行。谢谢MaratC,你的评论让我想起了我在这个过程中早些时候尝试过的一些东西,但被驳回了。Groovy自己的“writefile”和“readfile”似乎工作得很好。我不确定为什么我会转到java.io.file(我相信我很快就会记住!),但现在我可以继续使用Groovy命令来完成同样的工作。再次感谢。请尝试
def list\u of_all\u files=sh脚本:“ls-la”,returnOutput:true
,这也将在从机上运行。这与日志无关。这些是由管道生成的文件。是的,我认为这是目前唯一的选择,运行一系列类似于上面提到的“sh”或“bat”命令。这使脚本看起来非常难看。。。