首页 > 解决方案 > Jenkins Pipeline Slack 两步交互

问题描述

我正在构建一个声明性的 Jenkins 流水线,在我完成了几个测试步骤之后,我想要一个步骤来通知一个松弛通道,一个构建已准备好进行生产。如果该 Slack 帖子在固定时间内没有得到回复,我希望 Slack 通知 Jenkins Pipeline 继续下一步。如果对 Slack 帖子的固定回复“ABORT”回复,我希望 Slack 与 Jenkins 管道进行通信以中止构建。关于如何在 Slack 和 Jenkins Pipeline 之间完成这种双向交互的任何想法?

node {
    stage('build'){
        echo "building"
    }
}
stage('Deploy approval'){
    input "Deploy to prod?"
}
node {
    stage('deploy to prod'){
        echo "deploying"
    }
}

标签: jenkinsjenkins-pipeline

解决方案


没有办法直接做。你可以做的是你可以将你的工作分成两个或三个工作,并使用这样的函数在第一个工作结束时发送通知:

def notifySlack(text, channel) {
def slackURL = ' https://hooks.slack.com/services/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'
def payload = JsonOutput.toJson([text      : text,
                                 channel   : channel,
                                 username  : "jenkins",
                                 icon_emoji: ":jenkins:"])
sh "curl -X POST --data-urlencode \'payload=${payload}\' ${slackURL}"

}

然后在 slack 中,您可以使用斜杠命令编写脚本来构建工作的另一部分(实际上是一项新工作):https ://github.com/auth0/slash#inputs-and-outputs

这可以通过编写 php 或任何服务器端代码并​​将其发送参数来完成,您可以在其中发送 ABORT,并且在您必须构建的工作中,有一个参数来检查这个传递参数的值并根据它有一个条件。


推荐阅读