首页 文章

我可以在声明性Jenkins管道中定义多个代理标签吗?

提问于
浏览
14

我正在使用declarative Jenkins pipelines运行我的一些构建管道,并想知道是否可以定义多个代理标签 .

我有许多构建代理连接到我的Jenkins,并希望这个特定的管道能够由具有不同标签(但不是所有代理)的各种代理构建 .

更具体地说,假设我有2个标签为'small'的代理,4个标签为'medium',6个标签为'large' . 现在我有一个资源非常低的管道,我希望它只在一个“小”或“中”大小的代理上执行,但不能在大型代理上执行,因为它可能导致更大的构建在队列中等待不必要的长时间 .

到目前为止我见过的所有例子都只使用一个标签 . 我试过这样的事情:

agent { label 'small, medium' }

但它失败了 .

我正在使用Jenkins Pipeline插件的2.5版本 .

4 回答

  • 19

    您可以在Jenkins安装中看到“管道语法”帮助,并查看示例步骤“节点”参考 .

    你可以使用 exprA||exprB

    node('small||medium') {
        // some block
    }
    
  • 9

    这个语法似乎对我有用:

    agent { label 'linux && java' }
    
  • 7

    编辑:我误解了这个问题 . 只有当您知道要为每个阶段运行哪个特定代理时,才能得到此答案 .

    如果您需要多个代理,您可以声明 agent none 然后在每个阶段声明代理 .

    https://jenkins.io/doc/book/pipeline/jenkinsfile/#using-multiple-agents

    来自文档:

    pipeline {
        agent none
        stages {
            stage('Build') {
                agent any
                steps {
                    checkout scm
                    sh 'make'
                    stash includes: '**/target/*.jar', name: 'app' 
                }
            }
            stage('Test on Linux') {
                agent { 
                    label 'linux'
                }
                steps {
                    unstash 'app' 
                    sh 'make check'
                }
                post {
                    always {
                        junit '**/target/*.xml'
                    }
                }
            }
            stage('Test on Windows') {
                agent {
                    label 'windows'
                }
                steps {
                    unstash 'app'
                    bat 'make check' 
                }
                post {
                    always {
                        junit '**/target/*.xml'
                    }
                }
            }
        }
    }
    
  • 0

    创建另一个标签调用“小型或中型”,其中包含6个所有代理 . 然后在Jenkinsfile中:

    agent { label 'small-or-medium' }
    

相关问题