在阶段结束之后或阶段开始之前触发Jenkins声明式管道中的操作?

时间:2018-11-19 17:52:55

标签: jenkins jenkins-declarative-pipeline

我有以下style="position: absolute; left: -1000px; top: -1000px"

Jenkinsfile

在哪里可以指定一组通用的“前阶段”或“后阶段”动作来执行?用例将在阶段结束时将日志记录信息发送到日志管理器,但是最好不要在每个阶段结束时复制并粘贴这些调用。

1 个答案:

答案 0 :(得分:1)

据我所知,Jenkins管道中没有通用的后期或前期挂钩。您可以在post section中定义发布步骤,但每个阶段都需要一个。

但是,如果您不想重复自己,可以有一些选择。

使用共享库

在其中放置重复代码的地方shared library。这样一来,您就可以使用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*"
}