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

NPE from CopyArtifact$DescriptorImpl.doCheckProjectName when using Copy artifact from Another Project in Promotion process of a template

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: Minor Minor
    • copyartifact-plugin
    • None
    • Jenkins 1.625.3.1
      Copy Artifact Plugin 1.37

      When adding a "Copy Artifact from another project" step in the promotion process in a Job Template, the server raises a NullPointerException when processing the following request:

      http://localhost:8083/job/test-template/descriptorByName/hudson.plugins.copyartifact.CopyArtifact/checkProjectName?value=
      

      The method doCheckProjectName in the CopyArtifact assume that the @AncestorInPath is not null which is a bug.

      Source code here: https://github.com/jenkinsci/copyartifact-plugin/blob/b17cbb4036e9045472cbb1b35c4b8e7ef712f375/src/main/java/hudson/plugins/copyartifact/CopyArtifact.java#L582

      How to reproduce:

      • Create a Job Template "test-job" at the root
      • Tick "Define Promotion Process"
      • "Copy Artifact from another project" action
      • An ERROR link appears

      Note: This issue does not block the functionality and this error can be ignored. Specifying an existing project and saving the configuration will make this error disappears.

          [JENKINS-32526] NPE from CopyArtifact$DescriptorImpl.doCheckProjectName when using Copy artifact from Another Project in Promotion process of a template

          ikedam added a comment -

          Do you mean Templates Plugin for Job Template?

          ikedam added a comment - Do you mean Templates Plugin for Job Template?

          Allan BURDAJEWICZ added a comment - - edited

          Yes. Absolutely. Here are some more information.

          Issues Related

          It seems to be related to:

          The scenario is different though as this issue does not appear when configuring a "templatized job" but when configuring a Template.

          How To reproduce

          Plugins:
          [CloudBees Templates Plugin](http://documentation.cloudbees.com/docs/cje-user-guide/template.html)
          [Promoted-Builds Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Promoted+Builds+Plugin)
          [Copy Artifact Plugin]https://wiki.jenkins-ci.org/display/JENKINS/Copy+Artifact+Plugin

          • Create a Job Template
          • In the `Properties` section, tick `Define Promotion Process`
          • Add the action `Copy artifacts from another project`
          • Error 500

          Possible Fix

          Seems to me that using `@AncestorInPath AbstractItem` instead of `@AncestorInPath AbstractProject` makes this work without breaking JENKINS-22856(https://issues.jenkins-ci.org/browse/JENKINS-22856).

          In the configuration of a Template

          `@AncestorInPath AbstractProject` returns null leading to the Error 500
          `@AncestorInPath AbstractItem` returns a `JobTemplate` and in the check for nearest `getParent` returns the correct `ItemGroup` element (a `Folder` if inside a folder or `Hudson` when at the root).

          In the configuration of a Templatized Job

          `@AncestorInPath AbstractProject` returns a `FreeStyleJob`
          `@AncestorInPath AbstractItem` returns a `FreeStyleJob` too.

          Maybe danielbeck could help us about this.

          Allan BURDAJEWICZ added a comment - - edited Yes. Absolutely. Here are some more information. Issues Related It seems to be related to: https://issues.jenkins-ci.org/browse/JENKINS-22856 https://github.com/jenkinsci/copyartifact-plugin/pull/36 The scenario is different though as this issue does not appear when configuring a "templatized job" but when configuring a Template. How To reproduce Plugins: [CloudBees Templates Plugin] ( http://documentation.cloudbees.com/docs/cje-user-guide/template.html ) [Promoted-Builds Plugin] ( https://wiki.jenkins-ci.org/display/JENKINS/Promoted+Builds+Plugin ) [Copy Artifact Plugin] https://wiki.jenkins-ci.org/display/JENKINS/Copy+Artifact+Plugin Create a Job Template In the `Properties` section, tick `Define Promotion Process` Add the action `Copy artifacts from another project` Error 500 Possible Fix Seems to me that using `@AncestorInPath AbstractItem` instead of `@AncestorInPath AbstractProject` makes this work without breaking JENKINS-22856 ( https://issues.jenkins-ci.org/browse/JENKINS-22856 ). In the configuration of a Template `@AncestorInPath AbstractProject` returns null leading to the Error 500 `@AncestorInPath AbstractItem` returns a `JobTemplate` and in the check for nearest `getParent` returns the correct `ItemGroup` element (a `Folder` if inside a folder or `Hudson` when at the root). In the configuration of a Templatized Job `@AncestorInPath AbstractProject` returns a `FreeStyleJob` `@AncestorInPath AbstractItem` returns a `FreeStyleJob` too. Maybe danielbeck could help us about this.

          ikedam added a comment -

          Thanks for the details!

          Let me see.
          Though I haven't ever used template-plugin, I imagine it works like this:

          • You can create a template project (let's call it TemplateA).
            • TemplateA never be a parent of a build, and it's never a `Job`.
          • You can create a new project from that TemplateA.
            • I believe it can be put in another folder. Let's call it /FolderB/TemplatedC .
            • /FolderB/TemplatedC can be built, and it's a `Job`.

          And problems occur in these cases:

          `anc` is used to resolve relative project names.
          `doCheckProjectName` should not resolve relative names for templates as templates can be put in another hierarchy, should it?

          ikedam added a comment - Thanks for the details! Let me see. Though I haven't ever used template-plugin, I imagine it works like this: You can create a template project (let's call it TemplateA). TemplateA never be a parent of a build, and it's never a `Job`. You can create a new project from that TemplateA. I believe it can be put in another folder. Let's call it /FolderB/TemplatedC . /FolderB/TemplatedC can be built, and it's a `Job`. And problems occur in these cases: This issue ( JENKINS-32526 ) occurs when configuring TemplateA. JENKINS-22856 occurs when configuring /FolderB/TemplatedC . `anc` is used to resolve relative project names. `doCheckProjectName` should not resolve relative names for templates as templates can be put in another hierarchy, should it?

          ikedam added a comment -

          And why do you need promoted-builds-plugin?
          I suppose the problem occurs even when you simply add copyartifact to the builder list of the template.
          (Don't templates have builders list?)

          ikedam added a comment - And why do you need promoted-builds-plugin? I suppose the problem occurs even when you simply add copyartifact to the builder list of the template. (Don't templates have builders list?)

          Jesse Glick added a comment -

          For CloudBees folks, CJP-1524 might avoid the need for fixes like these in plugins, but at root it is a bug in Copy Artifact that it assumes that an @AncestorInPath exists. Any form validation must be written to handle the possibility of being called from an unknown context and behave gracefully.

          Jesse Glick added a comment - For CloudBees folks, CJP-1524 might avoid the need for fixes like these in plugins, but at root it is a bug in Copy Artifact that it assumes that an @AncestorInPath exists. Any form validation must be written to handle the possibility of being called from an unknown context and behave gracefully.

          Code changed in jenkins
          User: Allan Burdajewicz
          Path:
          src/main/java/hudson/plugins/copyartifact/CopyArtifact.java
          src/main/java/hudson/plugins/copyartifact/DownstreamBuildSelector.java
          src/main/resources/hudson/plugins/copyartifact/Messages.properties
          src/test/java/hudson/plugins/copyartifact/CopyArtifactTest.java
          src/test/java/hudson/plugins/copyartifact/DownstreamBuildSelectorTest.java
          http://jenkins-ci.org/commit/copyartifact-plugin/a34592bc7bfd3d733da7d520f6c15dbc6b728043
          Log:
          JENKINS-32526 - Handle null @AncestorInPath when selecting Jobs/Dow…

          [FIXED JENKINS-32526] - Handle null @AncestorInPath when selecting Jobs/Downstream/Upstream Jobs and for autocompletion.

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Allan Burdajewicz Path: src/main/java/hudson/plugins/copyartifact/CopyArtifact.java src/main/java/hudson/plugins/copyartifact/DownstreamBuildSelector.java src/main/resources/hudson/plugins/copyartifact/Messages.properties src/test/java/hudson/plugins/copyartifact/CopyArtifactTest.java src/test/java/hudson/plugins/copyartifact/DownstreamBuildSelectorTest.java http://jenkins-ci.org/commit/copyartifact-plugin/a34592bc7bfd3d733da7d520f6c15dbc6b728043 Log: JENKINS-32526 - Handle null @AncestorInPath when selecting Jobs/Dow… [FIXED JENKINS-32526] - Handle null @AncestorInPath when selecting Jobs/Downstream/Upstream Jobs and for autocompletion.

          ikedam added a comment -

          Released 1.38 containing this fix.
          It will be available in the update center in a day.

          ikedam added a comment - Released 1.38 containing this fix. It will be available in the update center in a day.

            allan_burdajewicz Allan BURDAJEWICZ
            allan_burdajewicz Allan BURDAJEWICZ
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated:
              Resolved: