3

我有一个 Jenkins 主节点和从节点池,它们动态增长和缩小(基于负载)。主节点称为“主节点”,从节点具有名称指南。目前没有一个节点有标签。

对于我的项目,我希望 github 的“开发”分支构建在主节点上,并拉取请求分支构建在任何一个从属节点上。这已经在使用 node('master') 和 node('!master') 的脚本化管道中成功运行。

我想开始使用新的声明式管道样式。当前是否可以根据分支名称在声明式管道中实现相同的“主”和“非主”行为?

在脚本化的管道中,它看起来像这样:

def selectedNode = BRANCH_NAME == 'develop' ? 'master' : '!master'

node(selectedNode) {
}

谢谢

4

2 回答 2

1

script如果它在脚本中工作,您通常可以在声明性管道的一个步骤中包含完全相同的内容。这对我来说是:

pipeline {
  agent { label 'docker' }
  stages {
    stage('build') {
      steps {
        script {
          def selectedNode = BRANCH_NAME == 'develop' ? 'master' : '!master'

          node(selectedNode) {
          }
        }
      }
    }
  }
}

我可能会走这条路,而不是使用顶级agent声明。

于 2017-07-22T03:28:09.777 回答
0

对亚历克斯来说,在将近 4 年内回答这个问题并不实际)

但对其他人来说会是这样。

首先 - 为你的奴隶设置标签。这是非常有用的。

第二 - 在声明性管道和阶段级代理中使用分支过滤(基于“何时”条件)。

pipeline {
  agent none
  stages {
    stage('branch develop') {
      agent { label 'master' }
      when { 
        beforeAgent true
        branch 'develop'
      }
      steps {
        echo 'run build on master node for branch develop'
      }
    }
    stage('branch not develop') {
      agent { label 'another_label' }
      when {
        beforeAgent true 
        not { branch 'develop' }
      }
      steps {
        echo 'run build on other nodes for not develop branch'
      }
    }
  }
}
于 2021-06-20T10:03:16.307 回答