使用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”命令。这使脚本看起来非常难看。。。