Я относительно новичок в конвейерах 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
}
}
Я просто не знаю, как синтаксически добиться этого.Конечно, я могу определить весь раздел пост-сборки a lib / var, например: doPotBuild.groovy
def call () {
post {...}
}
, но как я в конечном итоге буду вызывать его из моего Jenkinsfile за пределами этого определенного post {}
блока сборкираздел (этапы АКА).
Я могу назвать его в каком-то stage('post build){doPostBuild()}
, но он не будет работать так, как должен работать настоящий раздел post {}
, например, он не будет исполненна одном из предыдущих этапов произошел сбой.
Есть мысли по этому поводу и, в основном, рабочие примеры?