Насколько я знаю, в трубопроводах Дженкинса нет универсального пост- или предстадийного хука. Вы можете определить этапы публикации в post
разделе , но вам необходим один этап на каждом этапе.
Однако, если вы не хотите повторяться, у вас есть несколько вариантов.
Использовать общую библиотеку
Место для размещения повторяющегося кода общая библиотека . Этот способ позволяет вам объявлять свои собственные шаги, используя Groovy.
Вам нужен другой репозиторий для определения разделяемой библиотеки, но кроме этого это довольно прямой путь, и вы можете повторно использовать код во всех конвейерах вашего Jenkins.
Использовать функцию
Если вы объявляете функцию вне pipeline
, вы можете вызывать ее с любого этапа. Это на самом деле не задокументировано и может быть предотвращено в будущем. Насколько я понимаю, это портит координацию между мастером и агентами. Тем не менее, это работает:
pipeline {
agent any
stages {
stage ("First") {
steps {
writeFile file: "resultFirst.txt", text: "all good"
}
post {
always {
cleanup "first"
}
}
}
stage ("Second") {
steps {
writeFile file: "resultSecond.txt", text: "all good as well"
}
post {
always {
cleanup "second"
}
}
}
post {
always {
cleanup "global" // this is only triggered after all stages, not after every
}
}
}
}
void cleanup(String stage) {
echo "cleanup ${stage}"
archiveArtifacts artifacts: "result*"
}