我对 Jenkins 管道相对较新,但是已经实现了一些,我意识到在我发疯之前我需要开始使用 jenkins 共享库。
已经想出了如何在库中定义一些重复的步骤,并从 Jenkinsfile 中以更少的混乱来调用它们,但不确定是否可以为整个后期构建部分做同样的事情(以为我已经阅读了如何定义lib和类似的整个管道),因为这几乎是每个管道代码的静态结束:
@Library('jenkins-shared-library')_
pipeline {
agent none
stages {
stage ('System Info') { agent any
steps { printSysInfo() }
}
stage ('Init'){ agent {label 'WinZipSE'}
steps { init('SCMroot') }
}
stage('Build') { agent any
steps { doMagic() }
}
}
// This entire 'post {}' section needs to go to a shared lib
// and be called just with a simple methed call, e.g.
// doPostBuild()
post {
always {
node ('master') {
googlechatnotification (
message: '[$BUILD_STATUS] Build $JOB_NAME $BUILD_NUMBER has finished',
url: 'id:credential_id_for_Ubuntu')
step (
[$class: 'Mailer',
recipients: 'sysadmins@example.com me@example.com',
notifyEveryUnstableBuild: true,
sendToIndividuals: true]
)
}
}
success {
node ('master') {
echo 'This will run only if successful'
}
}
failure {
node ('master') {
echo 'This will run only if failed'
}
}
// and so on
}
}
我只是不知道如何在语法上实现这一点。当然,我可以将整个后期构建部分定义为一个 lib/var,例如:doPotBuild.groovy
def call () {
post {...}
}
post {}
但是我最终将如何从定义的构建块部分(AKA 阶段)之外的 Jenkinsfile 中调用它。
我可以在 some 中调用它stage('post build){doPostBuild()}
,但它不会满足真实post {}
部分的工作方式,例如,如果前一个阶段出现故障,它不会被执行。
对此有何想法,主要是工作示例?