jenkins stageview插件的一个bug,找到原因并解决

正常情况


WX20180802-133752

stage("更新") {
    echo "1"
    echo "2"
    input "Are you sure" // 正常
}



异常情况


WX20180802-134715

stage("更新") {
    parallel(
        "one": { echo "1" },
        "two": { echo "2" }
    )
    input "Are you sure" // 不显示
}

在stageview中不显示确认按钮,导致无法进入下一步。



寻找原因


WX20180802-135209

在日志中可以发现,其实jenkins已经执行了input,只是在stageview上无法显示。

WX20180802-140225

通过比对正常情况与异常情况的api数据,发现了问题所在!

在stageview插件中input对话框的显示是通过当前节点的STATUS == “PAUSED_PENDING_INPUT”来判断的,当Stage中设置了并行parallel后,该阶段的STATUS变成了IN_PROGRESS,从而导致input对话框不显示,流程无法进行下去。



解决方案


1)集成jenkins,直接修改前端状态的判断即可

  $scope.checkInputStatus = (build, stage) ->
    if stage.status == "PAUSED_PENDING_INPUT"
      return true
    else if build.status == "PAUSED_PENDING_INPUT" && stage.status == "IN_PROGRESS"
      return true
    else
      return false

2)使用jenkins,通过issue向stageview开发者反映,期待插件更新。 https://issues.jenkins-ci.org/browse/JENKINS-41164