首页 > 解决方案 > 如何在 Jenkins 流水线构建后阶段运行脚本

问题描述

是否可以使用作业 DSL 将 shell 脚本作为管道作业的构建后步骤执行?

    post {
        success {
            sh """
            echo "Pipeline Works"
            """
            }
        failure {
            shell('''
            |echo "This job failed"
            |echo "And I am not sure why"
            '''.stripMargin().stripIndent()
            )
        }
    }

我能够执行 oneliner,但理想情况下我想执行一个脚本。

我试过这样的东西

    publishers {
        postBuildScripts {
            steps {
                shell('echo Hello World')
            }
            onlyIfBuildSucceeds(false)
            onlyIfBuildFails()
        }
    }
}

但似乎发布者已被弃用。

标签: jenkinsjenkins-pipelinejenkins-groovyjenkins-job-dslpost-build

解决方案


您最初的尝试很好,问题是.stripMargin().stripIndent()在声明性管道中调用字符串是不可能的。要运行这样的 groovy 代码,您需要用script块包装它。
尝试以下操作:

post {
    success {
        sh 'echo "Pipeline Works"'
    }
    failure {
        script {
            sh '''
            |echo "This job failed"
            |echo "And I am not sure why"
            '''.stripMargin().stripIndent()
        }
    }
}

推荐阅读