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

Parallel nodes for scripted pipelines cannot be clicked

    • Icon: Bug Bug
    • Resolution: Duplicate
    • Icon: Major Major
    • blueocean-plugin
    • Jenkins version 2.46.1, Blue Origin 1.0.1,
      Chrome 58.0.3029.96, Safari 10.1

      Jenkins is installed via yum on a CentOS machine and is not using a reverse proxy.
    • Blue Ocean 1.1

      Problem

      • Parallel nodes defined within a script block cannot be selected while running
      • Parallel nodes defined in Pipeline script cannot be selected

      Notes

      • Parallel nodes for declarative are NOT broken
      • Verified on 1.1-beta2 as well as 1.0.1

      Screencast

       

      To reproduce, run one of the scripts below as a non multibranch pipeline - note that you can't click on an in progress branch. 

      I have tested with the following combinations and all of them had this problem

      Jenkins using script syntax and non-dynamic parallel

      node {
          stage("Build/Test") {
              parallel(
                "b1": {
                  sh 'ping -c 5 localhost'
                },
                "b2": {
                  sh 'ping -c 10 localhost'
                },
                "b3": {
                  sh 'ping -c 20 localhost'
                }
              )
          }
      }
      

      Jenkinsfile using script syntax and dynamic parallel

      node {
          stage("Build/Test") {
              def builds = [:]
      
              for (def option in ["one", "two"]) {
                      def node_name = ""
                      if ("one" == "${option}") {
                          node_name = "node001"
                      } else {
                          node_name = "node002"
                      }
                      
                      def option_inside = "${option}"
                      
                      builds["${node_name} ${option_inside}"] = {
                          node {
                              stage("Build Test ${node_name} ${option_inside}") {
                                  sh 'ping -c 10 localhost'
                              }
                          }
                      }
              }
              parallel builds
          }
      }
      

      Jenkinsfile using script syntax without inner stages

      node {
          stage("Build/Test") {
              def builds = [:]
      
              for (def option in ["one", "two"]) {
                      def node_name = ""
                      if ("one" == "${option}") {
                          node_name = "node001"
                      } else {
                          node_name = "node002"
                      }
                      
                      def option_inside = "${option}"
                      
                      builds["${node_name} ${option_inside}"] = {
                          node {
                              sh 'ping -c 10 localhost'
                          }
                      }
              }
              parallel builds
          }
      }
      

      Declarative Jenkinsfile using script block

      pipeline {
          agent none
          stages {
              stage("Build/Test") {
                  steps {
                      script {
                        def builds = [:]
      
                        for (def option in ["one", "two"]) {
                                def node_name = ""
                                if ("one" == "${option}") {
                                    node_name = "node001"
                                } else {
                                    node_name = "node002"
                                }
                                
                                def option_inside = "${option}"
                                
                                builds["${node_name} ${option_inside}"] = {
                                    node {
                                        stage("Build Test ${node_name} ${option_inside}") {
                                            sh 'ping -c 10 localhost'
                                        }
                                    }
                                }
                        }
                        parallel builds
                      }
                  }
              }
          }
      }
      

          [JENKINS-44086] Parallel nodes for scripted pipelines cannot be clicked

          Wesley Bland created issue -

          Wesley Bland added a comment -

          BTW, I verified that this doesn't change by switching to other browsers either on MacOS or Windows. So it doesn't appear to be a browser problem.

          Wesley Bland added a comment - BTW, I verified that this doesn't change by switching to other browsers either on MacOS or Windows. So it doesn't appear to be a browser problem.

          James Dumay added a comment -

          wbland we've fix a lot of these problems in Blue Ocean 1.1-beta2 which is available from the experimental update center. The running Pipeline has been completely reworked so there are less papercuts.

          Would you be able to give 1.1-beta2 a try and let us know if that fixes things for you?

          James Dumay added a comment - wbland we've fix a lot of these problems in Blue Ocean 1.1-beta2 which is available from the experimental update center . The running Pipeline has been completely reworked so there are less papercuts. Would you be able to give 1.1-beta2 a try and let us know if that fixes things for you?
          James Dumay made changes -
          Epic Link New: JENKINS-43953 [ 181485 ]
          James Dumay made changes -
          Assignee New: James Dumay [ jamesdumay ]

          James Dumay added a comment -

          Assigning to myself for investigation

          James Dumay added a comment - Assigning to myself for investigation
          James Dumay made changes -
          Sprint New: Blue Ocean 1.1-beta3 [ 316 ]

          Wesley Bland added a comment -

          It doesn't seem to solve the problem. Strangely, it works for the jobs on the left, which are more traditional stages that look like this:

          def setup(Map args) {
              node("${args.nodeName}") {
                  stage("Setup ${args.nodeName}") {
                      checkout([$class: 'GitSCM', branches: ...snip... ])
                      sh "./autogen.sh --with-autotools=$HOME/software/autotools/bin | tee a.txt"
                      sh "tar --exclude tarball.tar.bz2 -cjf tarball.tar.bz2 *"
                      archiveArtifacts artifacts: "a-${args.nodeName}.txt"
                      stash includes: 'tarball.tar.bz2', name: "${args.nodeName}-tarball"
                  }
              }
          }
          
          ...snip...
                  stage("Setup") {
                      steps {
                          parallel (
                              "angpc01": {
                                  echo "Setup"
                                  setup nodeName: "angpc01"
                              },
                              "ancc01": {
                                  echo "Setup"
                                  setup nodeName: "ancc01"
                              }
                          )
                      }
                  }
          

          The problems come up when I get to the jobs buried in the script in the original post. It does however autoscroll to the bottom of the console output every time the output is updated now, which is a little annoying.

          Wesley Bland added a comment - It doesn't seem to solve the problem. Strangely, it works for the jobs on the left, which are more traditional stages that look like this: def setup(Map args) { node("${args.nodeName}") { stage("Setup ${args.nodeName}") { checkout([$class: 'GitSCM', branches: ...snip... ]) sh "./autogen.sh --with-autotools=$HOME/software/autotools/bin | tee a.txt" sh "tar --exclude tarball.tar.bz2 -cjf tarball.tar.bz2 *" archiveArtifacts artifacts: "a-${args.nodeName}.txt" stash includes: 'tarball.tar.bz2', name: "${args.nodeName}-tarball" } } } ...snip... stage("Setup") { steps { parallel ( "angpc01": { echo "Setup" setup nodeName: "angpc01" }, "ancc01": { echo "Setup" setup nodeName: "ancc01" } ) } } The problems come up when I get to the jobs buried in the script in the original post. It does however autoscroll to the bottom of the console output every time the output is updated now, which is a little annoying.
          James Dumay made changes -
          Description Original: I have a pipeline that generates multiple parallel nodes/stages. I've simplified my use case below:
          {noformat}
          pipeline {
              agent none
              stages {
                  stage("Build/Test") {
                      steps {
                          script {
                              def builds = [:]
                              
                              for (def option in ["one", "two"]) {
                                      def node_name = ""
                                      if ("one" == "${option}") {
                                          node_name = "node001"
                                      } else {
                                          node_name = "node002"
                                      }
                                      
                                      def option_inside = "${option}"
                                      
                                      builds["${node_name} ${option_inside}"] = {
                                          node ("${node_name}") {
                                              stage("Build Test ${node_name} ${option_inside}") {
                                                  unstash "${node_name}-tarball"
                                                  sh "$HOME/software/jenkins_scripts/nightly.sh ${config_inside} gnu ${option_inside} yes"
                                              }
                                          }
                                      }
                                  }
                              }
                              
                              parallel builds
                          }
                      }
                  }
              }
          }
          {noformat}
          This produces a job that looks like the screen shot below (with more options in the screenshot). The issue is that I can't click on any of the stages that are running except for the topmost one. I can click on any of the stages that are completed.

          This is a pain because it means that there's no way to get an update on in progress jobs, which is a problem for me because our jobs can sometimes run for as long as 8 hours. I don't think this is an issue with the browser or OS, but hopefully you'll tell me that it is and I can try to fix things on my end.
          New: *Problem*
          Parallel nodes defined within a script block cannot be selected

          !node-within-script-block.gif!

          *Jenkinsfile*
          {code}
          pipeline {
              agent none
              stages {
                  stage("Build/Test") {
                      steps {
                          script {
                            def builds = [:]

                            for (def option in ["one", "two"]) {
                                    def node_name = ""
                                    if ("one" == "${option}") {
                                        node_name = "node001"
                                    } else {
                                        node_name = "node002"
                                    }
                                    
                                    def option_inside = "${option}"
                                    
                                    builds["${node_name} ${option_inside}"] = {
                                        node {
                                            stage("Build Test ${node_name} ${option_inside}") {
                                                sh 'ping -c 10 localhost'
                                            }
                                        }
                                    }
                            }
                            parallel builds
                          }
                      }
                  }
              }
          }
          {code}

          *Original request*
          I have a pipeline that generates multiple parallel nodes/stages. I've simplified my use case below:
          {noformat}
          pipeline {
              agent none
              stages {
                  stage("Build/Test") {
                      steps {
                          script {
                              def builds = [:]
                              
                              for (def option in ["one", "two"]) {
                                      def node_name = ""
                                      if ("one" == "${option}") {
                                          node_name = "node001"
                                      } else {
                                          node_name = "node002"
                                      }
                                      
                                      def option_inside = "${option}"
                                      
                                      builds["${node_name} ${option_inside}"] = {
                                          node ("${node_name}") {
                                              stage("Build Test ${node_name} ${option_inside}") {
                                                  unstash "${node_name}-tarball"
                                                  sh "$HOME/software/jenkins_scripts/nightly.sh ${config_inside} gnu ${option_inside} yes"
                                              }
                                          }
                                      }
                                  }
                              }
                              
                              parallel builds
                          }
                      }
                  }
              }
          }
          {noformat}
          This produces a job that looks like the screen shot below (with more options in the screenshot). The issue is that I can't click on any of the stages that are running except for the topmost one. I can click on any of the stages that are completed.

          This is a pain because it means that there's no way to get an update on in progress jobs, which is a problem for me because our jobs can sometimes run for as long as 8 hours. I don't think this is an issue with the browser or OS, but hopefully you'll tell me that it is and I can try to fix things on my end.
          James Dumay made changes -
          Attachment New: node-within-script-block.gif [ 37627 ]

            Unassigned Unassigned
            wbland Wesley Bland
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: