Jenkins Pipeline Slack双向步进互动

时间:2018-05-04 07:59:34

标签: jenkins jenkins-pipeline

我正在构建一个声明性Jenkins管道,在完成一些测试步骤之后,我想有一个步骤通知松弛通道构建已准备好进行生产。如果在一段固定的时间内没有响应那个松弛的帖子,我希望Slack通知Jenkins Pipeline继续下一步。如果固定回复“ABORT”回复Slack帖子,我希望Slack与Jenkins管道进行通信以中止构建。关于如何实现Slack和Jenkins Pipeline之间双向交互的任何想法?

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

1 个答案:

答案 0 :(得分:1)

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

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}"

}

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

这可以完成写一个PHP或任何服务器端代码并​​发送它可以发送ABORT的参数,在你必须构建的作业中,有一个参数来检查这个传递的参数的值并具有一个条件,根据它。