Jenkins得到了中止构建的用户

时间:2017-07-03 16:32:03

标签: jenkins jenkins-pipeline

有没有办法在用户中止构建时获取用户名? 最好使用jenkins管道代码。

当用户中止构建时,它会记录:

Aborted by <username>

所以我希望它在短时间内存储为变量。

用例:以后用于通过电子邮件或其他消息传递方式通知用户本身或其他用户的用户名。

3 个答案:

答案 0 :(得分:4)

如果作业中止,似乎将InterruptedBuildAction对象插入到构建操作列表中。此对象可用于检索中止构建的用户。我在Jenkinsfile中使用以下函数:

@NonCPS
def getAbortUser()
{
    def causee = ''
    def actions = currentBuild.getRawBuild().getActions(jenkins.model.InterruptedBuildAction)
    for (action in actions) {
        def causes = action.getCauses()

        // on cancellation, report who cancelled the build
        for (cause in causes) {
            causee = cause.getUser().getDisplayName()
            cause = null
        }
        causes = null
        action = null
    }
    actions = null

    return causee
}

答案 1 :(得分:2)

不幸的是,目前似乎没有其他解决方案,只是调整Jenkin的代码本身和解决方法。

构建后操作 可编辑电子邮件通知 触发器→< strong> 添加触发器 已中止 发送至 添加< / em> 请求者 →... Jenkins Mailer Plugin

  

向发起构建的用户发送电子邮件。

没有 Aborter 可以添加。

http://<jenkins>/job/<project name>/lastBuild/api/xml显示:

...
<result>ABORTED</result>
...

但是没有信息可以中止构建。

解决方法可能是Post build task脚本中的curl http://<jenkins>/job/<project name>/<build #>grep的{​​{1}}。

答案 2 :(得分:1)

实际上,您可以使用REST API获取此信息,只需将以下URL与适当的版本一起使用:

/api/json?tree=actions[causes[*]]&pretty=true

您应该能够在行动[原因]下找到所要求的信息,例如:

{
    "_class" : "jenkins.model.InterruptedBuildAction",
    "causes" : [
        {
          "_class" : "jenkins.model.CauseOfInterruption$UserInterruption",
          "shortDescription" : "Aborted by some_user_name"
        }
      ]
},