【问题标题】:Limiting Jenkins pipeline to running only on specific nodes将 Jenkins 管道限制为仅在特定节点上运行
【发布时间】:2019-12-09 14:24:44
【问题描述】:

我正在构建将广泛使用 Jenkins 管道的工作。我们的节点由其标签为每个项目指定,但与常规作业不同,管道构建似乎没有“限制该项目可以运行的位置”复选框。如何指定管道将按照我对常规作业的方式在哪个节点上运行?

【问题讨论】:

  • 您找到解决方案了吗?我正在设置多分支管道,并希望限制特定从属设备上的构建,谢谢

标签: jenkins jenkins-pipeline


【解决方案1】:

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

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

有关node 参数的详细说明,请参阅https://jenkins.io/doc/pipeline/steps/workflow-durable-task-step/#node-allocate-node

2019 年编辑:这个答案(和问题)是在 2017 年提出的,当时只有一种 Jenkins 流水线,脚本化流水线,从那时起就添加了声明性流水线。所以上面的答案对于脚本管道是正确的,有关声明性管道的答案请参见下面的其他答案。

【讨论】:

  • 这个答案是唯一有效的。我试过这个:{ node { label 'labelName' } },但不起作用。
【解决方案2】:

为了记录,让我们在这里也有declarative pipeline 示例(选择一个具有标签“X”的节点):

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

【讨论】:

  • 如果你想在具有多个标签之一的节点上运行:“agent { label 'X||Y' }”
  • @nsantos Jenkins 文档的糟糕程度一直让我感到惊讶。它没有提到文档中的几个标签。谢谢!
  • @nsantos 知道怎么做label.startswith 'Prefix'
【解决方案3】:

需要明确的是,因为 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
  }
}

【讨论】:

    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 1970-01-01
    相关资源
    最近更新 更多