Jenkins声明式流水线 - 根据git分支动态选择节点(代理)

3
我有一个Jenkins主节点和一组从节点,它们会根据负载动态增长和缩小。主节点名为“master”,从节点的名称是GUID。目前,这些节点都没有标签。
对于我的项目,我希望从GitHub上拉取“develop”分支并在主节点上构建,在任意一个从节点上构建拉取请求分支。使用node('master')和node('!master')的脚本化流水线已经成功实现了这一点。
我想开始使用新的声明式流水线风格。基于分支名称,在声明式流水线中是否可以实现与“master”和“not master”相同的行为?
在脚本化流水线中,代码如下:
def selectedNode = BRANCH_NAME == 'develop' ? 'master' : '!master'

node(selectedNode) {
}

谢谢

2个回答

1
如果在 Scripted Pipeline 中可以正常工作,通常可以在声明式 Pipeline 的 script 步骤中包含完全相同的内容。这对我来说可行:
pipeline {
  agent { label 'docker' }
  stages {
    stage('build') {
      steps {
        script {
          def selectedNode = BRANCH_NAME == 'develop' ? 'master' : '!master'

          node(selectedNode) {
          }
        }
      }
    }
  }
}

我可能会选择这种方式,而不是与顶层的agent声明搞混。

0

对于Alex来说,近4年来的回答已经不再实际。

但对于其他人来说,这将是有用的。

首先 - 为您的从属设置标签。这非常有用。

其次 - 在声明性流水线和阶段级代理中使用分支过滤(基于“when”条件)。

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'
      }
    }
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接