Jenkins 声明式管道:当仅为管道设置代理时,哪个工作区与阶段相关联?

Jenkins declarative pipeline: What workspace is associated with a stage when the agent is set only for the pipeline?

这是一个声明性管道的示例,其中为管道设置了代理,但未在各个阶段设置:

pipeline {
    agent { node { label 'linux' } }
    stages {
        stage('Checkout') {
            steps {
                checkout scm
            }
        }
        stage('Build') {
            steps {
                sh 'make'
            }
        }
    }
}

我找到的关于脚本管道的文档清楚地表明,单个工作区将在单个节点块中使用,但多个节点块可能会分配多个工作区,因此有必要在这些步骤之间隐藏,使用External Workspace Plugin 等,如果您想确定步骤之间的工作区中有什么。

我很难找到有关声明性管道的工作区保证的文档。此示例存在关于工作空间的哪些保证?

我相信我在测试类似管道时遇到了在不同工作区执行的两个阶段,但我不确定发生了什么。我真的很想避免需要在我的构建步骤之前隐藏我的结帐或使用外部工作区插件所以我希望有一种方法可以强制我的所有阶段 运行 合而为一 workspace/on 一个节点.

70% 确定——根据轶事证据——如果你在顶层指定一个节点,永远不要像您那样覆盖它。

我保留在收到对此答案的反馈后调整我的信心水平的权利。 :D

提供的流水线代码应该只创建一个工作区和其中的 运行 所有阶段。除非您在任何 stages 中创建新的 agent 指令,否则它不会使用其他节点或工作区。

顺便说一句,checkout scm 在带有声明的管道的开头自动发生,因此您不需要显式调用它。