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

Cmake arguments sometimes are added to path in parallel build

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Closed (View Workflow)
    • Priority: Minor
    • Resolution: Cannot Reproduce
    • Component/s: cmakebuilder-plugin
    • Labels:
      None
    • Environment:
      Jenkins version 2.164.3
      cmake plugin version 2.6.1
    • Similar Issues:

      Description

      I'm trying to simulate matrix build using Pipeline

      Pipeline snippet

       

      def cmake_tasks(os_labels, configs, DL_on_off) {
          tasks = [:]
          def DL_dir_labels = ['ON': 'DL', 'OFF': 'noDL']
          for(int i = 0; i < os_labels.size(); i++) {
             def os = os_labels[i]
             for (int j = 0; j < configs.size(); j++) {
                for (int k = 0; k < DL_on_off.size(); k++) {
                   def config = configs[j]
                   def DL = DL_on_off[k]
                   def DL_dir_label = DL_dir_labels["${DL}"]
                   def generator = "Ninja"
                   def steps = [[withCmake: true]]
                   def cmakeArgs = "-Dsomevar=somevalue"
                   def cmake_inst = 'InSearchPath'
                   
                   tasks["${os}/${config}/${DL_dir_label}"] = {
                      node("build && ${os}") {
                         stage("${os}/${config}/${DL_dir_label}") {
                             if (os == "windows") {
                                 // does not matter
                             } else {
                                 cmakeBuild(buildDir: "build_${config}_${DL_dir_label}", 
                                            buildType: config, 
                                            cleanBuild: true, 
                                            cmakeArgs: cmakeArgs, 
                                            generator: generator, 
                                            installation: cmake_inst, 
                                            sourceDir: ".", 
                                            steps: steps)
                             }
                         }
                      }
                   }
                }
             }
          }
          return tasks
      }
      
      pipeline {
          agent none
          stages {
              stage('Configure & Build') {
                 steps {
                    script { 
                       def OSes = ["windows", "linux"] 
                       def configs = ["Release", "Debug"] 
                       def DL_inc = ["ON", "OFF"] 
                       parallel cmake_tasks(OSes, configs, DL_inc) 
                    }
                 }
              }
          }
      }
      
       
      

       

       

      Sometimes I see failed steps with the output similar to the following (please, note that "CMAKE_BUILD_TYPE=Debug" is concatenated with a path):

      Cleaning build dir /jenkins/workspace/project@7/build_Debug_DL ... [build_Debug_DL] $ cmake -G Ninja -D CMAKE_BUILD_TYPE=Debug -Dsomevar=somevalue /jenkins/workspace/project@7
      CMake Error: The source directory "/jenkins/workspace/project@7/build_Debug_DL/CMAKE_BUILD_TYPE=Debug" does not exist.
      Specify --help for usage, or press the help button on the CMake GUI.
      

        Attachments

          Activity

          wl2776 Vladimir Eremeev created issue -
          wl2776 Vladimir Eremeev made changes -
          Field Original Value New Value
          Description I'm trying to simulate matrix build using Pipeline

          Pipeline snippet

          {{def cmake_tasks(os_labels, configs, DL_on_off) {
              tasks = [:]
              def DL_dir_labels = ['ON': 'DL', 'OFF': 'noDL']
              for(int i = 0; i < os_labels.size(); i++) {
                  def os = os_labels[i]

                  for (int j = 0; j < configs.size(); j++) {
                      for (int k = 0; k < DL_on_off.size(); k++) {
                          def config = configs[j]
                          def DL = DL_on_off[k]
                          def DL_dir_label = DL_dir_labels["${DL}"]

                          def generator = "Ninja"
                          def steps = [[withCmake: true]]
                          def cmakeArgs = "-Dsomevar=somevalue"

                          def cmake_inst = 'InSearchPath'

                          tasks["${os}/${config}/${DL_dir_label}"] = {
                              node("build && ${os}") {
                                  stage("${os}/${config}/${DL_dir_label}") {
                                      if (os == "windows") {
                                          bat """
                                          ${env.WORKSPACE}\\DL\\test\\support\\configure.cmd ${config} build_${config}_${DL_dir_label} ${DL}
                                          ninja
                                          """
                                      } else {
                                          cmakeBuild(buildDir: "build_${config}_${DL_dir_label}",
                                                  buildType: config,
                                                  cleanBuild: true,
                                                  cmakeArgs: cmakeArgs,
                                                  generator: generator,
                                                  installation: cmake_inst,
                                                  sourceDir: ".",
                                                  steps: steps)
                                      }
                                  }
                              }
                          }
                      }
                  }
              }
              return tasks
          }

          pipeline {
              agent none

              parameters {
                  string(defaultValue: 'develop',
                          description: 'Commit ID or branch name to build',
                          name: 'branch',
                          trim: false)
              }

              stages {
                  stage('Checkout') {
                      steps {
                          script {
          // checkout on windows and linux
                          }
                      }
                  }
                  stage('Configure & Build') {
                      steps {
                          script {
                              def OSes = ["windows", "linux"]
                              def configs = ["Release", "Debug"]
                              def DL_inc = ["ON", "OFF"]
                              parallel cmake_tasks(OSes, configs, DL_inc)
                          }
                      }
                  }
              }
          }

          }}

          Sometimes I see failed steps with the following output:

          {{Cleaning build dir /jenkins/workspace/project@7/build_Debug_DL ... [build_Debug_DL] $ cmake -G Ninja -D CMAKE_BUILD_TYPE=Debug -Dsomevar=somevalue /jenkins/workspace/project@7
          CMake Error: The source directory "/jenkins/workspace/project@7/build_Debug_DL/CMAKE_BUILD_TYPE=Debug" does not exist.
          Specify --help for usage, or press the help button on the CMake GUI.}}
          I'm trying to simulate matrix build using Pipeline

          Pipeline snippet

           
          {code:java}
          def cmake_tasks(os_labels, configs, DL_on_off) {
              tasks = [:]
              def DL_dir_labels = ['ON': 'DL', 'OFF': 'noDL']
              for(int i = 0; i < os_labels.size(); i++) {
                 def os = os_labels[i]
                 for (int j = 0; j < configs.size(); j++) {
                    for (int k = 0; k < DL_on_off.size(); k++) {
                       def config = configs[j]
                       def DL = DL_on_off[k]
                       def DL_dir_label = DL_dir_labels["${DL}"]
                       def generator = "Ninja"
                       def steps = [[withCmake: true]]
                       def cmakeArgs = "-Dsomevar=somevalue"
                       def cmake_inst = 'InSearchPath'
                       
                       tasks["${os}/${config}/${DL_dir_label}"] = {
                          node("build && ${os}") {
                             stage("${os}/${config}/${DL_dir_label}") {
                                 if (os == "windows") {
                                     // does not matter
                                 } else {
                                     cmakeBuild(buildDir: "build_${config}_${DL_dir_label}",
                                                buildType: config,
                                                cleanBuild: true,
                                                cmakeArgs: cmakeArgs,
                                                generator: generator,
                                                installation: cmake_inst,
                                                sourceDir: ".",
                                                steps: steps)
                                 }
                             }
                          }
                       }
                    }
                 }
              }
              return tasks
          }

          pipeline {
              agent none
              stages {
                  stage('Configure & Build') {
                     steps {
                        script {
                           def OSes = ["windows", "linux"]
                           def configs = ["Release", "Debug"]
                           def DL_inc = ["ON", "OFF"]
                           parallel cmake_tasks(OSes, configs, DL_inc)
                        }
                     }
                  }
              }
          }

           
          {code}
           

           

          Sometimes I see failed steps with the output similar to the following (please, note that "CMAKE_BUILD_TYPE=Debug" is concatenated with a path):
          {code:java}
          Cleaning build dir /jenkins/workspace/project@7/build_Debug_DL ... [build_Debug_DL] $ cmake -G Ninja -D CMAKE_BUILD_TYPE=Debug -Dsomevar=somevalue /jenkins/workspace/project@7
          CMake Error: The source directory "/jenkins/workspace/project@7/build_Debug_DL/CMAKE_BUILD_TYPE=Debug" does not exist.
          Specify --help for usage, or press the help button on the CMake GUI.
          {code}
          15knots Martin Weber made changes -
          Priority Blocker [ 1 ] Minor [ 4 ]
          15knots Martin Weber made changes -
          Resolution Cannot Reproduce [ 5 ]
          Status Open [ 1 ] Resolved [ 5 ]
          15knots Martin Weber made changes -
          Status Resolved [ 5 ] Closed [ 6 ]

            People

            Assignee:
            15knots Martin Weber
            Reporter:
            wl2776 Vladimir Eremeev
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Dates

              Created:
              Updated:
              Resolved: