jenkins - 我是否必须在声明式 Jenkins 管道中使用节点 block ?

标签 jenkins jenkins-pipeline

我正在阅读有关 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 点说明了这一点:

  1. Do: All Material Work Within a Node

Any material work within a pipeline should occur within a node block.

Why? By default, the Jenkinsfile script itself runs on the Jenkins master, using a lightweight executor expected to use very few resources. Any material work, like cloning code from a Git server or compiling a Java application, should leverage Jenkins distributed builds capability and run an agent node.

我怀疑这是用于脚本管道的。

现在我的问题是:

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

我当前的管道已定义 label这是在 4 个代理上。但我的整个管道始终在一个代理上执行(我想要的),但我怀疑它正在执行 stage1slaveX也许stage2slaveY 。为什么这没有发生?

最佳答案

该文档非常具有误导性。

文档建议的是利用分布式构建。通过使用 agentnode block 激活分布式构建。 当您想要几乎只在一个节点上运行管道时,应该使用代理。节点 block 提供了更大的灵活性,因为它允许您指定应在何处执行粒度任务。

如果您在某个代理上运行管道,并且使用同一代理封装了带有节点的步骤,则除了将新的执行器分配给用节点封装的步骤之外,不会有任何效果。 这样做没有明显的好处。您只会消耗不需要的执行器。

总之,您在使用 agent 时已经在使用分布式构建,这也是文档隐含推荐的内容。

关于jenkins - 我是否必须在声明式 Jenkins 管道中使用节点 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47551193/

相关文章:

hadoop - Jenkins作为Hadoop Edge节点上的Job Server

Jenkins 共享库

java - Jenkins 和 Perforce 密码问题

android - "env: bash: No such file or directory"尝试在 Mac Mini 上的 Jenkins 上运行 gradle

jenkins - 有没有办法检查作业的 jenkins 输出,如果字符串存在则使作业成功,否则失败?

jenkins - 什么会导致控制台 View 和 blueocean View 之间的时间戳不同?

jenkins - 使用 Jenkins REST API 重建构建

tomcat - 如何使用 Jenkins 管道将 war 部署到tomcat?

docker - 在 Jenkins 上运行 docker image 的 $HOME 目录在哪里?

jenkins - 如何将文件附加到 Jenkins Pipeline 通知