Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-38339

UI for downstream jobs launched with 'build' step

    Details

    • Similar Issues:
    • Sprint:
      Blue Ocean 1.1, Blue Ocean 1.2-beta1, Blue Ocean 1.2-beta2, Blue Ocean 1.4 - beta 3, Blue Ocean 1.5 - beta 2
    • Released As:
      1.14.0

      Description

      Improvement on roadmap

      This improvement is on the Blue Ocean project roadmap. Check the roadmap page for updates.

      Same pipeline as JENKINS-38337

      stage "Stage 1"
      stage ("Trigger jobs") {
          parallel(
              downstream1: {
                  build 'downstream1'
              },
              downstream2: {
                  build 'downstream2'
              }
          )
      }
      

      In the logs, we see things like Starting building: downstream2 #3, however unlike the classic console, this is not a link, so you can't browse to the other build.

       

      Out of scope: 

      When the "don't wait" mode is used, there is no link to the resultant downstream job, so no need to link it back  ( ie build job: 'downer', wait: false)

       

       

        Attachments

          Issue Links

            Activity

            Hide
            stuartrowe Stuart Rowe added a comment - - edited

            I've been looking into this as well. What I've found so far:

            • The downstream runs have an associated BuildUpstreamNodeAction contributed by the build step.
            • The BuildUpstreamNodeAction action has an upstreamNodeId pointing back to the build step that triggered the downstream run.
            • This DownstreamJobListener adds a NodeDownstreamBuildAction to the node pointed to by the upstreamNodeId.
            • This upstreamNodeId doesn't match the id of the node typically selected when viewing the Blue Ocean pipeline graph (that node is typically a stage or parallel branch node)
            • There's code in PipelineNodeGraphVisitor.java that accumulates actions from nodes within a branch or stage and then adds them to the node for that branch or stage. I believe this is the source of the issue.

             

            Show
            stuartrowe Stuart Rowe added a comment - - edited I've been looking into this as well. What I've found so far: The downstream runs have an associated  BuildUpstreamNodeAction contributed by the build step. The BuildUpstreamNodeAction action has an upstreamNodeId pointing back to the build step that triggered the downstream run. This DownstreamJobListener adds a NodeDownstreamBuildAction  to the node pointed to by the upstreamNodeId. This upstreamNodeId doesn't match the id of the node typically selected when viewing the Blue Ocean pipeline graph (that node is typically a stage or parallel branch node) There's code in  PipelineNodeGraphVisitor.java that accumulates actions from nodes within a branch or stage and then adds them to the node for that branch or stage. I believe this is the source of the issue.  
            Hide
            roalter Luis Roalter added a comment -

            Sometimes it works. but not always. For some reasons the NodeDownstreamBuildAction is missing when using the api /blue/rest/organizations/jenkins/pipelines/

            When going closer into /blue/rest/organizations/jenkins/pipelines/<project>/runs/x/nodes/y/ the information is missing in this endpoint too.

            Funny fact, I've debugged it with the Script console by replaying the code from https://github.com/jenkinsci/blueocean-plugin/blob/master/blueocean-pipeline-api-impl/src/main/java/io/jenkins/blueocean/listeners/DownstreamJobListener.java. This works and all the triggered builds are there.

             

            But for me it's too complex to dig into the blue-ocean rest and debug there.

            Any suggestion from anyone how to debug it?

            Show
            roalter Luis Roalter added a comment - Sometimes it works. but not always. For some reasons the NodeDownstreamBuildAction is missing when using the api /blue/rest/organizations/jenkins/pipelines/ When going closer into /blue/rest/organizations/jenkins/pipelines/<project>/runs/x/nodes/y/ the information is missing in this endpoint too. Funny fact, I've debugged it with the Script console by replaying the code from https://github.com/jenkinsci/blueocean-plugin/blob/master/blueocean-pipeline-api-impl/src/main/java/io/jenkins/blueocean/listeners/DownstreamJobListener.java . This works and all the triggered builds are there.   But for me it's too complex to dig into the blue-ocean rest and debug there. Any suggestion from anyone how to debug it?
            Hide
            ryanstewart456 Ryan Stewart added a comment -

            I have raised a bug for this JENKINS-60995

            as it is a regression of existing functionality 

            Show
            ryanstewart456 Ryan Stewart added a comment - I have raised a bug for this  JENKINS-60995 as it is a regression of existing functionality 
            Hide
            wernerwessely Werner Wessely added a comment - - edited

            For anybody struggling with this and in need of some inspiration for a workaround, we are using a wrapper for the job step which prints a link to the downstream build until this issue is fixed. Better than nothing:

             

            def getBlueOceanLink(obj, jobName) {
              def buildNumber
            
              if(obj instanceof Exception) {
                obj.toString().split(" ").each {
                  if(it.contains("#")) {
                    buildNumber = it.substring(1)
                  }
                }
              } else if(obj instanceof org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper) {
                buildNumber = obj.getNumber()
              } else {
                return "Can not determine Blue Ocean link!!!"
              }
            
              return "For detailed information see: http://<YOUR JENKINS>/blue/organizations/jenkins/${jobName}/detail/${jobName}/${buildNumber}/pipeline"
            }
            
            // Wrapper:
            def linkBuild(job, parameters) {
                def buildInfo
                try {
                    buildInfo = build(job: job, parameters: parameters, wait: true, propagate: true)
                } catch (Exception e) {
                    println getBlueOceanLink(e, job)
                    throw e
                }
                println getBlueOceanLink(buildInfo, job)
            }
            
            // Usage:
            stage ("My stage") {
             linkBuild("My job", [
              string(name: "my param", value: some_value)
             ])
            }

            If anybody has come up with something better I would love to hear it!

            Show
            wernerwessely Werner Wessely added a comment - - edited For anybody struggling with this and in need of some inspiration for a workaround, we are using a wrapper for the job step which prints a link to the downstream build until this issue is fixed. Better than nothing:   def getBlueOceanLink(obj, jobName) {   def buildNumber    if (obj  instanceof  Exception) {     obj.toString().split( " " ).each {        if (it.contains( "#" )) {         buildNumber = it.substring(1)       }     }   }  else   if (obj  instanceof  org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper) {     buildNumber = obj.getNumber()   }  else  {      return   "Can not determine Blue Ocean link!!!"   }    return   "For detailed information see: http: //<YOUR JENKINS>/blue/organizations/jenkins/${jobName}/detail/${jobName}/${buildNumber}/pipeline" } // Wrapper: def linkBuild(job, parameters) {     def buildInfo      try  {         buildInfo = build(job: job, parameters: parameters, wait:  true , propagate:  true )     }  catch  (Exception e) {         println getBlueOceanLink(e, job)          throw  e     }     println getBlueOceanLink(buildInfo, job) } // Usage: stage ( "My stage" ) { linkBuild( "My job" , [   string(name:  "my param" , value: some_value) ]) } If anybody has come up with something better I would love to hear it!
            Hide
            iamwangu wangu added a comment -

            It is not work with Blue Ocean 1.19.0

            Show
            iamwangu wangu added a comment - It is not work with Blue Ocean 1.19.0

              People

              • Assignee:
                Unassigned
                Reporter:
                vlatombe Vincent Latombe
              • Votes:
                48 Vote for this issue
                Watchers:
                73 Start watching this issue

                Dates

                • Created:
                  Updated: