Jenkins管道平行阶段略有差异

问题描述 投票:0回答:1

我有一个Jenkins管道作业,它会触发一组节点做一些类似的事情。

代码如下所示。

#!groovy
pipeline {
  agent none
  stages {
    stage('Build') {
      parallel {
        stage('Server01') {
          agent {
            label 'Server01'
          }
          steps {
            sh 'do-something-01 --name Server01'
            sh 'do-something-02 --name Server01'
            sh 'do-something-03 --name Server01'
            sh 'do-something-04 --name Server01'
          }
        }
        stage('Server02') {
          agent {
            label 'Server02'
          }
          steps {
            sh 'do-something-01 --name Server02'
            sh 'do-something-02 --name Server02'
            sh 'do-something-03 --name Server02'
            sh 'do-something-04 --name Server02'
          }
        }
        stage('Server03') {
          agent {
            label 'Server03'
          }
          steps {
            sh 'do-something-01 --name Server03'
            sh 'do-something-02 --name Server03'
            sh 'do-something-03 --name Server03'
            sh 'do-something-04 --name Server03'
          }
        }
      }
    }
  }
}

我想遵循DRY代码原则。

我可以将特定步骤包装到函数中并使用参数来更改函数行为吗?我不熟悉groovy

像下面的东西

#!groovy
pipeline {
  agent none
  stages {
    stage('Build') {
      parallel {
        stage('Server01') {
          agent {
            label 'Server01'
          }
          steps {
            // function is defined in somewhere
            function('Server01')
          }
        }
        stage('Server02') {
          agent {
            label 'Server02'
          }
          steps {
            function('Server02')
          }
        }
        stage('Server03') {
          agent {
            label 'Server03'
          }
          steps {
            function('Server03')
          }
        }
      }
    }
  }
}
jenkins groovy jenkins-pipeline
1个回答
0
投票

如果您想保留声明性管道,那么您需要将function('Server01')添加为var并将其用作库。请参考这个Extending Shared Libraries

如果您准备从声明性转换为脚本式管道,那么您可以灵活地在Jenkinsfile中定义函数。

下面是一个Scripted管道示例

stage ('Build') {
  function('Server01')
}

def function(serverName) {
  node {
      sh 'do-something --name serverName'
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.