В Jenkinsfile почтовый блок always
с использованием sshPublisher
кажется мне ошибочным.Он не выполняется, если статус сборки ABORTED
.
Предположим, у меня есть следующее Jenkinsfile
:
pipeline {
agent any
environment {
// setup
}
stages {
stage("Build") {
// build
}
stage("Deploying for review") {
steps {
sshPublisher(publishers: [sshPublisherDesc(configName: "foo", transfers: [
sshTransfer(execCommand: "docker run --rm -d -p $PORT:443 " +
" --name '$PROJECT-$DOCKER_TAG' bar.foo.com/$PROJECT:$DOCKER_TAG")
])])
}
}
stage("Review") {
agent none
steps {
input "Deploy to production?"
}
}
stage("Promotion") {
steps {
echo "Promotion"
}
}
stage("Deploying to production") {
steps {
echo "Deploy to production"
}
}
}
post {
always {
sshPublisher(publishers: [sshPublisherDesc(configName: "foo", transfers: [
sshTransfer(execCommand: "docker stop '$PROJECT-$DOCKER_TAG')
])])
}
}
}
Если пользователь прерывает сборку на этапе Review
будет сгенерирован следующий вывод, и команда docker stop
в блоке post
НЕ будет выполнена.
[Pipeline] stage
[Pipeline] { (Review)
[Pipeline] {
[Pipeline] input
Deploy to production?
Proceed or Abort
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Promotion)
Stage "Promotion" skipped due to earlier failure(s)
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Deploying to production)
Stage "Deploying to production" skipped due to earlier failure(s)
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Declarative: Post Actions)
[Pipeline] step
SSH: Current build result is [ABORTED], not going to run.
[Pipeline] }
[Pipeline] // stage
Во-первых, почему sshPublisher
не выполняется, если результат построения равен ABORTED
?И если есть веская причина, как я могу заставить ее работать еще?