首页 文章

我是否必须在Declarative Jenkins管道中使用节点块?

提问于
浏览
1

我正在阅读Jenkins管道的最佳实践 . 我创建了一个声明性管道,它不执行并行作业,我想在同一个从站上运行所有内容 .

我用:

agent {
    label 'xxx'
}

我的其余部分看起来像:

pipeline {
        agent {
            label 'xxx'
        }
    triggers {
        pollSCM pipelineParams.polling
    }

    options {
        buildDiscarder(logRotator(numToKeepStr: '3'))
    }

    stages {
        stage('stage1') {
            steps {
                xxx
            }
        }

        stage('stage2') {
            steps {
                xxx
            }
        }
    }

    post {
        always {
            cleanWs()
        }

        failure {
            xxx"
        }

        success {
            xxx         
        }
    }
}

现在我读了最佳实践here . 第4点告诉我们:

执行:节点内的所有材料工作管道内的任何材料工作都应在节点块内进行 . 为什么?默认情况下,Jenkinsfile脚本本身在Jenkins主服务器上运行,使用轻量级执行程序,预计使用的资源非常少 . 任何重要的工作,如从Git服务器克隆代码或编译Java应用程序,都应该利用Jenkins分布式构建功能并运行代理节点 .

我怀疑这是脚本管道 .

现在我的问题是:

我是否必须在声明性管道中创建 node node (这是可能的)或者当我想在另一个特定代理上运行我的舞台时,我是否必须在舞台内使用代理?

我当前的管道已经定义了一个 label ,它位于4个代理上 . 但是我的整个管道总是在一个代理上执行(我想要的),但我怀疑它在 slaveX 上执行 stage1 ,在 slaveY 上执行 stage2 . 为什么这不会发生?

1 回答

  • 2

    文档很容易让人误解 .

    文档建议的是利用分布式构建 . 通过使用 agentnode 块激活分布式构建 . 当您想要在一个节点上几乎完全运行管道时,应该使用 agent . 节点块允许更灵活,因为它允许您指定应该执行粒度任务的位置 .

    如果在某个代理程序上运行管道,并且使用相同代理程序封装了一个带有节点的步骤,则不会对将新执行程序分配给使用节点封装的步骤产生任何影响 . 这样做没有明显的好处 . 您将只是消耗您不需要的执行程序 .

    总之,在使用 agent 时,您已经在使用分布式构建,这就是文档模糊推荐的内容 .

相关问题