Jenkins声明性管道 - 基于git branch

时间:2017-07-20 16:42:30

标签: jenkins jenkins-pipeline jenkins-declarative-pipeline

我有一个Jenkins主站和从属节点池,它们会动态增长和缩小(基于负载)。主节点被称为" master"奴隶们有名字的指甲。目前,没有节点有标签。

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

我想开始使用新的Declarative样式的管道。目前是否可以实现相同的" master"并且"不是主人"声明性管道中的行为,基于分支名称?

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

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

node(selectedNode) {
}

由于

2 个答案:

答案 0 :(得分:1)

如果它在脚本中工作,通常可以在声明性管道中的script步骤中包含完全相同的内容。这适合我:

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

          node(selectedNode) {
          }
        }
      }
    }
  }
}

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

答案 1 :(得分:0)

在将近 4 年内回答它对 Alex 来说是不现实的)

但对其他人来说会。

首先 - 为您的奴隶设置标签。很有用。

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

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