我有一段代码可以列出两个节点上 /tmp
目录中的所有文件,代码如下(脚本语法):
stage('Demo') {
node('node1') {
println new File('/tmp/').listFiles().toList()
}
node('node2') {
println new File('/tmp/').listFiles().toList()
}
}
然而,两个节点的结果是相同的。看起来代码只在主节点上执行,只有println函数在2个节点上执行。
问题是:这是真的吗?如果是,我如何知道代码是在主节点还是从节点上执行的?
node
内的代码块不应该在代理上执行吗? - FuzzYnode
上下文的任何 Jenkins 步骤都将在那些代理上执行。例如,sh 'ls -1 /tmp/'
将在该代理上运行ls -1 /tmp/
命令。但是,实际的 Groovysh
方法和 JVM 代码在 Jenkins 主服务器上执行。Jenkins 管道中的所有 Groovy 代码都在主服务器上执行。这就是为什么new File('/tmp')
在主服务器上执行而不是代理上。希望这不会增加更多的困惑。 - mkobit