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

"when changeset" not working in P4 multibranch pipeline with Windows Jenkins Master

    • Icon: Bug Bug
    • Resolution: Won't Fix
    • Icon: Blocker Blocker
    • p4-plugin
    • Jenkins 2.203
      P4-Plugin 1.10.6

      I am following this recent example and it does not seem to work for multibranch P4. All of the echo commands show that the changeset information is fully available, but the when changeset conditional never passes:

      pipeline {  agent { label 'master' }  stages {
         stage("Test changeset"){
              when { changeset "**/Jenkinsfile"}
                  steps{ echo "The changeset test worked!!"}
              }
          stage("Display changeset?") {
            steps {
              script {
                 def changeLogSets = currentBuild.changeSets           for (int i = 0; i < changeLogSets.size(); i++) {
                 def entries = changeLogSets[i].items           for (int j = 0; j < entries.length; j++) {
                     def entry = entries[j]
                     echo "${entry.commitId} by ${entry.author} on ${new Date(entry.timestamp)}: ${entry.msg}"               def files = new ArrayList(entry.affectedFiles)               for (int k = 0; k < files.size(); k++) {
                         def file = files[k]
                         echo " ${file.editType.name} ${file.path}"               }
                  }
                 }
              }
            }
      

      Results:

      [Pipeline] }
      [Pipeline] // stage
      [Pipeline] stage
      [Pipeline] { (Test changeset)
      Stage "Test changeset" skipped due to when conditional
      [Pipeline] }
      [Pipeline] // stage
      [Pipeline] stage
      [Pipeline] { (Display changeset?)
      [Pipeline] script
      [Pipeline] {
      [Pipeline] echo
      66 by jesse on Tue Nov 05 03:40:41 PST 2019: Polling time adjust
      [Pipeline] echo
       edit //streams/Dev-Jenkins/Jenkinsfile
      [Pipeline] }
      [Pipeline] // script
      [Pipeline] }
      [Pipeline] // stage

      Is this a bug?

          [JENKINS-60066] "when changeset" not working in P4 multibranch pipeline with Windows Jenkins Master

          Karl Wirth added a comment - - edited

          Note: Original testing for pipeline and changeset was in JENKINS-58441.

          Karl Wirth added a comment - - edited Note: Original testing for pipeline and changeset was in JENKINS-58441 .

          Karl Wirth added a comment -

          Hi jrapczak,

           for me if I submit the 'Jenkinsfile' to '//streams/main/Jenkinsfile' worked when I selected the sub branch (main) and chose 'Build now':

           

          [Pipeline] { (Test changeset)
          [Pipeline] echo
          The changeset test worked!!
          [Pipeline] }
          [Pipeline] // stage
          [Pipeline] stage
          [Pipeline] { (Run script)
          [Pipeline] script
          [Pipeline] {
          [Pipeline] echo
          2094 by super on Wed Nov 06 17:43:54 UTC 2019: Edited
          [Pipeline] echo
            edit //streams/main/Jenkinsfile
          [Pipeline] echo
          P4_CHANGELIST is NOW:
          [Pipeline] echo
          2094
          

          This was with P4-Plugin 1.10.6 but Jenkins 1.176.1.

          Are you running the test in the same way (build now) ? If you are then maybe it's Jenkins version related.

           

          Note that I don't fully understand the Jenkins 'when' and 'changeset' syntax but I managed to refine my script so that it can match when I submit any file to the path '//streams/main/sub/...':

          when { changeset "//streams/main/sub/**"}
              steps{ echo "You submitted to //streams/main/sub/..."}
          

          or any file under any 'sub' directory:

           when { changeset "**/sub/**"} 
               steps{ echo "You submitted to //.../sub/..."}
          

           

          Karl Wirth added a comment - Hi jrapczak ,  for me if I submit the 'Jenkinsfile' to '//streams/main/Jenkinsfile' worked when I selected the sub branch (main) and chose 'Build now':   [Pipeline] { (Test changeset) [Pipeline] echo The changeset test worked!! [Pipeline] } [Pipeline] // stage [Pipeline] stage [Pipeline] { (Run script) [Pipeline] script [Pipeline] { [Pipeline] echo 2094 by super on Wed Nov 06 17:43:54 UTC 2019: Edited [Pipeline] echo edit //streams/main/Jenkinsfile [Pipeline] echo P4_CHANGELIST is NOW: [Pipeline] echo 2094 This was with P4-Plugin 1.10.6 but Jenkins 1.176.1. Are you running the test in the same way (build now) ? If you are then maybe it's Jenkins version related.   Note that I don't fully understand the Jenkins 'when' and 'changeset' syntax but I managed to refine my script so that it can match when I submit any file to the path '//streams/main/sub/...': when { changeset " //streams/main/sub/**" } steps{ echo "You submitted to //streams/main/sub/..." } or any file under any 'sub' directory: when { changeset "**/sub/**" } steps{ echo "You submitted to //.../sub/..." }  

          Jesse Rapczak added a comment - - edited

          I run it the same way you are, but I am on Jenkins 2.203. Are you able to test with that? I'm not sure how I could easily roll back our Jenkins to an earlier 1.X version but I can look into setting up a separate test environment if you are unable to check with latest. I will actually try to roll back to the latest LTS release anyway (2.190.2).

          Jesse

          Jesse Rapczak added a comment - - edited I run it the same way you are, but I am on Jenkins 2.203. Are you able to test with that? I'm not sure how I could easily roll back our Jenkins to an earlier 1.X version but I can look into setting up a separate test environment if you are unable to check with latest. I will actually try to roll back to the latest LTS release anyway (2.190.2). Jesse

          Jesse Rapczak added a comment - - edited

          I re-installed Jenkins LTS 2.190.2 and the behavior is exactly the same for me as 2.203. I wonder if this is a Jenkins 1.x vs Jenkins 2.x issue as you say?

          Jesse Rapczak added a comment - - edited I re-installed Jenkins LTS 2.190.2 and the behavior is exactly the same for me as 2.203. I wonder if this is a Jenkins 1.x vs Jenkins 2.x issue as you say?

          Karl Wirth added a comment -

          Hi jrapczak - Thanks for trying. I'll spin up 2.190.2 and try it here.

          Karl Wirth added a comment - Hi jrapczak - Thanks for trying. I'll spin up 2.190.2 and try it here.

          Karl Wirth added a comment -

          Hi jrapczak - Still working OK for me on a new P4D server on 2.190.2. Maybe this is an OS or sensitivity issue. If you would prefer these answers to be private please email the response to 'support@perforce.com' for my attention:

          Please get me the output from:

          (1) p4 -Ztag info

          (2) p4 -Ztag streams

          (3) p4 print //streams/Dev-Jenkins/Jenkinsfile

          Also in your setup are you using folders to keep the multibranch pipeline in?

          What OS is the Jenkins server running on?

          What OS is the P4D server running on?

          Karl Wirth added a comment - Hi jrapczak - Still working OK for me on a new P4D server on 2.190.2. Maybe this is an OS or sensitivity issue. If you would prefer these answers to be private please email the response to 'support@perforce.com' for my attention: Please get me the output from: (1) p4 -Ztag info (2) p4 -Ztag streams (3) p4 print //streams/Dev-Jenkins/Jenkinsfile Also in your setup are you using folders to keep the multibranch pipeline in? What OS is the Jenkins server running on? What OS is the P4D server running on?

          Jesse Rapczak added a comment -

          I will send you the output privately via support alias. To answer your other questions:

          I have setup the Multibranch pipeline using the default settings, for the most part. Jenkins has created a top-level job and inside of that are the branch jobs. Each job gets a generated P4 workspace of:

          jenkins-${NODE_NAME}-${JOB_NAME}-${EXECUTOR_NUMBER}
          

          Jenkins server OS is Windows 10 Pro

          P4D server OS is P4D/LINUX26X86_64/2019.1/1865205 (2019/10/11)

          Jesse Rapczak added a comment - I will send you the output privately via support alias. To answer your other questions: I have setup the Multibranch pipeline using the default settings, for the most part. Jenkins has created a top-level job and inside of that are the branch jobs. Each job gets a generated P4 workspace of: jenkins-${NODE_NAME}-${JOB_NAME}-${EXECUTOR_NUMBER} Jenkins server OS is Windows 10 Pro P4D server OS is P4D/LINUX26X86_64/2019.1/1865205 (2019/10/11)

          Karl Wirth added a comment - - edited

          Just for anyone watching/finding this. Worked with Jesse and could not get

          **/Jenkinsfile

          to work, but did get

          //DEPOT_NAME/**/Jenkinsfile

          working. Windows Jenkins master connected to Linux P4d.

          Note - Reason for using this - attempting to implement polling exclusions so (for example) artifact submits do not trigger the job.

          Karl Wirth added a comment - - edited Just for anyone watching/finding this. Worked with Jesse and could not get **/Jenkinsfile to work, but did get //DEPOT_NAME /**/ Jenkinsfile working. Windows Jenkins master connected to Linux P4d. Note - Reason for using this - attempting to implement polling exclusions so (for example) artifact submits do not trigger the job.

          Karl Wirth added a comment -

          Confirm this is a bug/feature of a Jenkins Windows master. If I use

          **/Jenkinsfile

          it does not find the changeset. As far as I can see we are populating the record correctly so this needs to be raised with CloudBees. It's either a bug or quirk of the syntax.

          Karl Wirth added a comment - Confirm this is a bug/feature of a Jenkins Windows master. If I use **/Jenkinsfile it does not find the changeset. As far as I can see we are populating the record correctly so this needs to be raised with CloudBees. It's either a bug or quirk of the syntax.

          Karl Wirth added a comment -

          There is possibly a bug here but it's outside the p4-plugin code. It's also posssible a different syntax is needed for Windows.

           Marking as Won't fix for now as there isn't an 'unable to fix' category.

          Karl Wirth added a comment - There is possibly a bug here but it's outside the p4-plugin code. It's also posssible a different syntax is needed for Windows.  Marking as Won't fix for now as there isn't an 'unable to fix' category.

            Unassigned Unassigned
            jrapczak Jesse Rapczak
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: