限制 Jenkins 管道 仅 在 特定 节点 上 运行

mrphzbgm  于 2022-11-21  发布在  Jenkins
关注(0)|答案(5)|浏览(249)

我正在构建将广泛使用Jenkins管道的作业。我们的节点是按项目的标签指定的,但与常规作业不同,管道构建似乎没有“限制此项目可以运行的位置”复选框。我如何指定管道将在哪个节点上运行,就像我对常规作业所做的那样?

xuo3flqw

xuo3flqw1#

在 执行 node 步骤 时 指定 所 需 的 节点 或 标记 :

node('specialSlave') {
   // Will run on the slave with name or tag specialSlave
}

中 的 每 一 个
See https://jenkins.io/doc/pipeline/steps/workflow-durable-task-step/#node-allocate-node for an extended explanation of the arguments to node .

    • 编辑 2019 : * * 这个 答案 ( 和 问题 ) 是 在 2017 年 提出 的 , 当时 Jenkins 管道 只有 一 种 风格 , 即 脚本 管道 , 此后 添加 了 声明 性 管道 。 因此 , 上述 答案 适用 于 脚本 管道 , 有关 声明 性 管道 的 答案 , 请 参阅 下面 的 其他 答案 。
vcirk6k6

vcirk6k62#

在json格式的声明性管道中选择标签为X的节点:

pipeline {
    agent { label 'X' }
...
...
}

您也可以使用||)或&&)运算子套用多个标示。
在标签为X标签为Y的任何节点上运行作业:

agent { label 'X || Y' }

仅在具有both标签的节点上运行作业:

agent { label 'X && Y' }

更多信息请参阅Jenkins Pipeline参考指南。
ps:如果您正在阅读这篇文章,您可能刚刚开始使用Jenkins管道,并且不确定应该使用声明式管道还是脚本式管道。简短回答:最好从声明式开始jenkins.io:
宣告式管缐和指令码管缐的建构方式完全不同。宣告式管缐是Jenkins Pipeline的最新功能,它:

  • 提供比Scripted Pipeline语法更丰富的语法功能,以及
  • 是为了让撰写和阅读管缐程式码更容易而设计。
vof42yt1

vof42yt13#

需要说明的是,由于Pipeline有两种语法,因此有两种方法可以实现这一点。

宣告式

pipeline {
    agent none

    stages {
        stage('Build') {
            agent { label 'slave-node​' }
            steps {
                echo 'Building..'
                sh '''
                '''
            }
        }
    }

    post {
        success {
            echo 'This will run only if successful'
        }
    }
}

脚本化

node('your-node') {
  try {

    stage 'Build'
    node('build-run-on-this-node') {
        sh ""
    }
  } catch(Exception e) {
    throw e
  }
}
r6vfmomb

r6vfmomb4#

不应执行Jenkins作业的代理或节点:

  • 这是对问题语句的否定,即不运行的节点
  • 对我来说,这是最奇怪的解决方案,但问题已经被提升到jenkins community

代理{ label '!生成代理名称' }

yshpjwxd

yshpjwxd5#

如果需要在单个节点上运行整个jenkins管道,请使用以下格式

pipeline {
agent { 
    label 'test1' 
    
}

stages {
    stage('Build') {
        steps {
            echo 'Building..'
        }
    }
    stage('Test') {
        steps {
            echo 'Testing..'
        }
    }
    stage('Deploy') {
        steps {
            echo 'Deploying....'
        }
    }
}

}
如果您需要在不同的节点中执行每个阶段,请使用以下格式,

pipeline {
agent any
stages {
    stage('Build') {
        steps {
            echo 'Building..'
        }
    }
    stage('Test') {
        steps {
            node("test1"){
            echo 'Testing..'
            }
        }
    }
    stage('Deploy') {
        steps {
            echo 'Deploying....'
        }
    }
}

}

相关问题