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

CulpritsRecipientProvider does not work with pipeline

    XMLWordPrintable

Details

    Description

      as you can see in the following code, in our case, the run is always an instance of WorkflowRun, and the runResult is always Result.SUCCESS, so no user would be add to recipient.

      https://github.com/jenkinsci/email-ext-plugin/blob/master/src/main/java/hudson/plugins/emailext/plugins/recipients/CulpritsRecipientProvider.java

              if (run instanceof AbstractBuild) {
                  Set<User> users = ((AbstractBuild<?,?>)run).getCulprits();
                  RecipientProviderUtilities.addUsers(users, context.getListener(), env, to, cc, bcc, debug);
              } else if (runResult != null && runResult.isWorseThan(Result.SUCCESS)) {
                  List<Run<?, ?>> builds = new ArrayList<>();
                  Run<?, ?> build = run;
                  while (build != null) {
                      final Result buildResult = build.getResult();
                      if (buildResult != null) {
                          if (buildResult.isWorseThan(Result.SUCCESS)) {
                              debug.send("Including build %s with status %s", build.getId(), buildResult);
                              builds.add(build);
                          } else {
                              break;
                          }
                      }
                      build = build.getPreviousCompletedBuild();
                  }
                  Set<User> users = RecipientProviderUtilities.getChangeSetAuthors(builds, debug);
                  RecipientProviderUtilities.addUsers(users, context.getListener(), env, to, cc, bcc, debug);
      }
      

      Attachments

        Issue Links

          Activity

            cdlee Makson Lee created issue -
            cdlee Makson Lee made changes -
            Field Original Value New Value
            Description as you can see in the following code, in our case, the run is always an instance of WorkflowRun, and the runResult is always Result.SUCCESS, so no user would be add to recipient.


            https://github.com/jenkinsci/email-ext-plugin/blob/master/src/main/java/hudson/plugins/emailext/plugins/recipients/CulpritsRecipientProvider.java

            {code:java}
                    if (run instanceof AbstractBuild) {
                        Set<User> users = ((AbstractBuild<?,?>)run).getCulprits();
                        RecipientProviderUtilities.addUsers(users, context.getListener(), env, to, cc, bcc, debug);
                    } else if (runResult != null && runResult.isWorseThan(Result.SUCCESS)) {
                        List<Run<?, ?>> builds = new ArrayList<>();
                        Run<?, ?> build = run;
                        while (build != null) {
                            final Result buildResult = build.getResult();
                            if (buildResult != null) {
                                if (buildResult.isWorseThan(Result.SUCCESS)) {
                                    debug.send("Including build %s with status %s", build.getId(), buildResult);
                                    builds.add(build);
                                } else {
                                    break;
                                }
                            }
                            build = build.getPreviousCompletedBuild();
                        }
                        Set<User> users = RecipientProviderUtilities.getChangeSetAuthors(builds, debug);
                        RecipientProviderUtilities.addUsers(users, context.getListener(), env, to, cc, bcc, debug);
            }
            {code}

            This should work fine. Is your pipelines build status being updated by something prior to calling this?

            davidvanlaatum David van Laatum added a comment - This should work fine. Is your pipelines build status being updated by something prior to calling this?
            cdlee Makson Lee added a comment -

            the inline document for Curlprits says,

            "Sends email to the list of users who committed a change since the last non-broken build till now. This list at least always include people who made changes in this build, but if the previous build was a failure it also includes the culprit list from there."

            so even the current build result is Result.SUCCESS, people who made changes in current build should be added to recipient, right?

            cdlee Makson Lee added a comment - the inline document for Curlprits says, "Sends email to the list of users who committed a change since the last non-broken build till now. This list at least always include people who made changes in this build , but if the previous build was a failure it also includes the culprit list from there." so even the current build result is Result.SUCCESS, people who made changes in current build should be added to recipient, right?

            true. Does it work for you if the current build is not successful though?

            davidvanlaatum David van Laatum added a comment - true. Does it work for you if the current build is not successful though?

            ie if its just the && runResult.isWorseThan(Result.SUCCESS) thats stopping it, easy fix

            davidvanlaatum David van Laatum added a comment - ie if its just the && runResult.isWorseThan(Result.SUCCESS) thats stopping it, easy fix
            cdlee Makson Lee added a comment - - edited

            this works,

            node ('docker'){
                try {
                    checkout([$class: 'GitSCM', branches: [[name: 'refs/heads/master']], userRemoteConfigs: [[url: 'git://server/test']]])
                    error ""
                    currentBuild.result = 'SUCCESS'
                } catch (Exception e) {
                    currentBuild.result = 'FAILURE'
                }
                emailext body: "test", recipientProviders: [[$class: 'CulpritsRecipientProvider']], subject: "test"
            }
            

            this does not,

            node ('docker'){
                try {
                    checkout([$class: 'GitSCM', branches: [[name: 'refs/heads/master']], userRemoteConfigs: [[url: 'git://server/test']]])
                    //error ""
                    currentBuild.result = 'SUCCESS'
                } catch (Exception e) {
                    currentBuild.result = 'FAILURE'
                }
                emailext body: "test", recipientProviders: [[$class: 'CulpritsRecipientProvider']], subject: "test"
            }
            
            cdlee Makson Lee added a comment - - edited this works, node ( 'docker' ){ try { checkout([$class: 'GitSCM' , branches: [[name: 'refs/heads/master' ]], userRemoteConfigs: [[url: 'git: //server/test' ]]]) error "" currentBuild.result = 'SUCCESS' } catch (Exception e) { currentBuild.result = 'FAILURE' } emailext body: "test" , recipientProviders: [[$class: 'CulpritsRecipientProvider' ]], subject: "test" } this does not, node ( 'docker' ){ try { checkout([$class: 'GitSCM' , branches: [[name: 'refs/heads/master' ]], userRemoteConfigs: [[url: 'git: //server/test' ]]]) //error "" currentBuild.result = 'SUCCESS' } catch (Exception e) { currentBuild.result = 'FAILURE' } emailext body: "test" , recipientProviders: [[$class: 'CulpritsRecipientProvider' ]], subject: "test" }

            Code changed in jenkins
            User: David van Laatum
            Path:
            src/main/java/hudson/plugins/emailext/plugins/recipients/CulpritsRecipientProvider.java
            src/test/java/hudson/plugins/emailext/plugins/recipients/CulpritsRecipientProviderTest.java
            http://jenkins-ci.org/commit/email-ext-plugin/60629e806a83d66a866b8985b3dbf2108642f240
            Log:
            fix JENKINS-40653 CulpritsRecipientProvider does not work with pipeline

            scm_issue_link SCM/JIRA link daemon added a comment - Code changed in jenkins User: David van Laatum Path: src/main/java/hudson/plugins/emailext/plugins/recipients/CulpritsRecipientProvider.java src/test/java/hudson/plugins/emailext/plugins/recipients/CulpritsRecipientProviderTest.java http://jenkins-ci.org/commit/email-ext-plugin/60629e806a83d66a866b8985b3dbf2108642f240 Log: fix JENKINS-40653 CulpritsRecipientProvider does not work with pipeline

            ver 2.53 released will show up in updates in the next few hours or you can download from https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/email-ext/2.53/email-ext-2.53.hpi and install manually

            davidvanlaatum David van Laatum added a comment - ver 2.53 released will show up in updates in the next few hours or you can download from https://repo.jenkins-ci.org/releases/org/jenkins-ci/plugins/email-ext/2.53/email-ext-2.53.hpi and install manually
            davidvanlaatum David van Laatum made changes -
            Resolution Fixed [ 1 ]
            Status Open [ 1 ] Closed [ 6 ]
            cdlee Makson Lee added a comment -

            thanks.

            cdlee Makson Lee added a comment - thanks.
            davidvanlaatum David van Laatum made changes -
            Link This issue is blocked by JENKINS-39925 [ JENKINS-39925 ]

            People

              davidvanlaatum David van Laatum
              cdlee Makson Lee
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: