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

Build fails on "Deploy artifacts to Maven repository" due to trying to upload parent POM twice for release artifacts

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: Major Major
    • deploy-plugin, maven-plugin
    • None

      Scenario: We have several sets of Java OSGi services with a parent pom and 4 child projects/poms. The parent pom does not generate any JARs, but each of the children generates a jar.Something like the following:

      project_folder/
        |_servicename.business/
        |   \_pom.xml
        |_servicename.jms/
        |   \_pom.xml
        |_servicename.model/
        |   \_pom.xml
        |_servicename.webservice/
        |   \_pom.xml
        \_pom.xml
      

      Each of these services is setup as a separate Jenkins job, and the maven dependencies are turned on so they all build in the appropriate order.

      Within the parent pom we have our <distributionManagement> section defined so we can run the mvn deploy goals to upload artifacts to our maven repository.

      Up until this point we have only been building SNAPSHOTS, for which the Nexus repository allows redeploying of artifacts.

      WHAT IS GOING WRONG:
      The other day we tried to build our first release version of some of the services, and the deployment into the Nexus maven repository failed on the "Deploy artifacts to Maven repository" task.

      Looking at the Console Output of the failed job, for some reason Jenkins is trying to deploy the parent POM a second time. Nexus refuses this, as it does not allow redeploying of release artifacts. Below is an excerpt from the output of one of those jobs:

      [INFO] ------------------------------------------------------------------------
      [INFO] BUILD SUCCESS
      [INFO] ------------------------------------------------------------------------
      [INFO] Total time: 52.240s
      [INFO] Finished at: Thu Oct 06 14:55:37 GMT 2011
      [INFO] Final Memory: 63M/151M
      [INFO] ------------------------------------------------------------------------
      channel stopped
      Maven RedeployPublished use remote maven settings from : /opt/maven/conf/settings.xml
      [ERROR] uniqueVersion == false is not anymore supported in maven 3
      [INFO] Deployment in dav:http://maven.luthresearch.net/nexus/content/repositories/releases/ (id=com.luthresearch,uniqueVersion=false)
      Deploying the main artifact savvyconnect-1.0.1.pom
      Uploading: dav:http://maven.luthresearch.net/nexus/content/repositories/releases/com/luthresearch/savvyconnect/savvyconnect/1.0.1/savvyconnect-1.0.1.pom
      Uploaded: dav:http://maven.luthresearch.net/nexus/content/repositories/releases/com/luthresearch/savvyconnect/savvyconnect/1.0.1/savvyconnect-1.0.1.pom (3 KB at 24.4 KB/sec)
      Uploading: http://maven.luthresearch.net/nexus/content/repositories/releases/com/luthresearch/savvyconnect/savvyconnect/1.0.1/savvyconnect-1.0.1.pom
      ERROR: Failed to deploy artifacts: Could not transfer artifact com.luthresearch.savvyconnect:savvyconnect:pom:1.0.1 from/to com.luthresearch (dav:http://maven.luthresearch.net/nexus/content/repositories/releases/): Failed to transfer file: http://maven.luthresearch.net/nexus/content/repositories/releases//com/luthresearch/savvyconnect/savvyconnect/1.0.1/savvyconnect-1.0.1.pom. Return code is: 400
      org.apache.maven.artifact.deployer.ArtifactDeploymentException: Failed to deploy artifacts: Could not transfer artifact com.luthresearch.savvyconnect:savvyconnect:pom:1.0.1 from/to com.luthresearch (dav:http://maven.luthresearch.net/nexus/content/repositories/releases/): Failed to transfer file: http://maven.luthresearch.net/nexus/content/repositories/releases//com/luthresearch/savvyconnect/savvyconnect/1.0.1/savvyconnect-1.0.1.pom. Return code is: 400
      at org.apache.maven.artifact.deployer.DefaultArtifactDeployer.deploy(DefaultArtifactDeployer.java:141)
      at hudson.maven.reporters.MavenArtifactRecord.deploy(MavenArtifactRecord.java:189)
      at hudson.maven.RedeployPublisher.perform(RedeployPublisher.java:158)
      at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:19)
      at hudson.model.AbstractBuild$AbstractRunner.perform(AbstractBuild.java:693)
      at hudson.model.AbstractBuild$AbstractRunner.performAllBuildSteps(AbstractBuild.java:668)
      at hudson.maven.MavenModuleSetBuild$RunnerImpl.post2(MavenModuleSetBuild.java:987)
      at hudson.model.AbstractBuild$AbstractRunner.post(AbstractBuild.java:615)
      at hudson.model.Run.run(Run.java:1428)
      at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:478)
      at hudson.model.ResourceController.execute(ResourceController.java:88)
      at hudson.model.Executor.run(Executor.java:230)
      Caused by: org.sonatype.aether.deployment.DeploymentException: Failed to deploy artifacts: Could not transfer artifact com.luthresearch.savvyconnect:savvyconnect:pom:1.0.1 from/to com.luthresearch (dav:http://maven.luthresearch.net/nexus/content/repositories/releases/): Failed to transfer file: http://maven.luthresearch.net/nexus/content/repositories/releases//com/luthresearch/savvyconnect/savvyconnect/1.0.1/savvyconnect-1.0.1.pom. Return code is: 400
      at org.sonatype.aether.impl.internal.DefaultDeployer.deploy(DefaultDeployer.java:284)
      at org.sonatype.aether.impl.internal.DefaultDeployer.deploy(DefaultDeployer.java:215)
      at org.sonatype.aether.impl.internal.DefaultRepositorySystem.deploy(DefaultRepositorySystem.java:480)
      at org.apache.maven.artifact.deployer.DefaultArtifactDeployer.deploy(DefaultArtifactDeployer.java:137)
      ... 11 more
      Caused by: org.sonatype.aether.transfer.ArtifactTransferException: Could not transfer artifact com.luthresearch.savvyconnect:savvyconnect:pom:1.0.1 from/to com.luthresearch (dav:http://maven.luthresearch.net/nexus/content/repositories/releases/): Failed to transfer file: http://maven.luthresearch.net/nexus/content/repositories/releases//com/luthresearch/savvyconnect/savvyconnect/1.0.1/savvyconnect-1.0.1.pom. Return code is: 400
      at org.sonatype.aether.connector.wagon.WagonRepositoryConnector$4.wrap(WagonRepositoryConnector.java:949)
      at org.sonatype.aether.connector.wagon.WagonRepositoryConnector$4.wrap(WagonRepositoryConnector.java:940)
      at org.sonatype.aether.connector.wagon.WagonRepositoryConnector$PutTask.flush(WagonRepositoryConnector.java:864)
      at org.sonatype.aether.connector.wagon.WagonRepositoryConnector.put(WagonRepositoryConnector.java:466)
      at org.sonatype.aether.impl.internal.DefaultDeployer.deploy(DefaultDeployer.java:278)
      ... 14 more
      Caused by: org.apache.maven.wagon.TransferFailedException: Failed to transfer file: http://maven.luthresearch.net/nexus/content/repositories/releases//com/luthresearch/savvyconnect/savvyconnect/1.0.1/savvyconnect-1.0.1.pom. Return code is: 400
      at org.apache.maven.wagon.shared.http.AbstractHttpClientWagon.put(AbstractHttpClientWagon.java:368)
      at org.apache.maven.wagon.shared.http.AbstractHttpClientWagon.put(AbstractHttpClientWagon.java:280)
      at org.sonatype.aether.connector.wagon.WagonRepositoryConnector$PutTask.run(WagonRepositoryConnector.java:825)
      at org.sonatype.aether.connector.wagon.WagonRepositoryConnector.put(WagonRepositoryConnector.java:465)
      ... 15 more
      [INFO] Deployment failed after 0.27 sec
      Build step 'Deploy artifacts to Maven repository' changed build result to FAILURE
      Sending e-mails to: devstaff@luthresearch.com
      Finished: FAILURE

      CONFIRMATION OF ISSUE:
      I logged into the build server, went to the project in the Jenkins workspace, deleted the existing release artifacts from the maven repository, and manually ran the mvn deploy goal. It succeeded in uploading all of the artifacts including the JARs.

      WORKAROUND:
      I disabled the "Post-Build Actions"->"Deploy artifacts to Maven repository."
      I then setup a "Post Steps"->"Invoke top-level Maven target" task with the Maven goal of "deploy". (I believe this functionality is provided by the Jenkins M2 Extra Steps Plugin. https://wiki.jenkins-ci.org/display/JENKINS/M2+Extra+Steps+Plugin)
      Using the post build step to execute the deploy goal succeeds in successfully uploading all of the artifacts.

            olamy Olivier Lamy
            trekoid Michael Rasmussen
            Votes:
            3 Vote for this issue
            Watchers:
            6 Start watching this issue

              Created:
              Updated:
              Resolved: