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