我有一个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')
}
}
}
}
}
}
如果您想保留声明性管道,那么您需要将function('Server01')
添加为var并将其用作库。请参考这个Extending Shared Libraries。
如果您准备从声明性转换为脚本式管道,那么您可以灵活地在Jenkinsfile中定义函数。
下面是一个Scripted管道示例
stage ('Build') {
function('Server01')
}
def function(serverName) {
node {
sh 'do-something --name serverName'
}
}