Skip to main content
Jump to: navigation, search

Difference between revisions of "Services/Nexus"

(Add section "Deploying to repo.eclipse.org with Gradle")
(Getting a Nexus repository for your Project)
 
(9 intermediate revisions by 6 users not shown)
Line 1: Line 1:
 +
{{note||This page provides information how to publish a Java project to the Nexus repository instance running at [https://repo.eclipse.org repo.eclipse.org]. Readers are expected to be familiar with Maven concepts and Maven repository publishing. If this is not the case, we strongly suggest readers to first read the basics from [https://help.sonatype.com/repomanager2/concepts/an-example---maven-repository-format Sonatype's documentation] and the [https://maven.apache.org/plugins/maven-deploy-plugin/deploy-mojo.html Apache Maven Deploy plugin].}}
 +
 
== Eclipse Nexus Instance ==
 
== Eclipse Nexus Instance ==
  
Line 7: Line 9:
 
Notes:
 
Notes:
  
* Snapshots older than 30-days are automatically removed on a weekly basis
+
* Snapshots older than 7-days are automatically removed on a weekly basis with the minimum of 1 snapshot being retained.
 +
* All snapshots for a given GAV are automatically removed 14 days after release.
 +
* All snapshots not being no requested in the last 360 days will be automatically removed.
 +
 
 +
=== Getting a Nexus repository for your Project ===
 +
 
 +
File a [https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Community&component=Nexus Bug] and specify what project you'd like a Nexus repo for.
  
 +
3 repositories are typically created:
  
=== Getting a Nexus repo for your Project ===
+
* group (``https://repo.eclipse.org/content/repositories/<projectname>/``), which groups both releases and snapshots repositories.
 +
* releases: ``https://repo.eclipse.org/content/repositories/<projectname>-releases/``, for publishing releases. Re-deploy is '''disabled'''.
 +
* snapshots: ``https://repo.eclipse.org/content/repositories/<projectname>-snapshots/``, for publishing snaphosts. Re-deploy is '''enabled'''.
  
Simply file a [https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Community&component=Nexus Bug] and specify what project you'd like a Nexus repo for.
+
Projects can only publish to these repositories from their [[Jenkins|Jenkins instance]]. Committers cannot do anything administrative on the instance.
  
 
== Pulling artifacts from Nexus ==
 
== Pulling artifacts from Nexus ==
Line 19: Line 30:
  
 
=== Releases Group ===
 
=== Releases Group ===
 +
 
https://repo.eclipse.org/content/repositories/releases/
 
https://repo.eclipse.org/content/repositories/releases/
  
Line 24: Line 36:
  
 
=== Snapshots Group ===
 
=== Snapshots Group ===
 +
 
https://repo.eclipse.org/content/repositories/snapshots/
 
https://repo.eclipse.org/content/repositories/snapshots/
  
Line 31: Line 44:
  
 
Finally you can also use a project specific repo if you only want to ensure you are only pulling artifacts from specific projects. To get the URLs for these projects you can navigate to https://repo.eclipse.org/index.html#view-repositories and browse for the URL link for the specific project.
 
Finally you can also use a project specific repo if you only want to ensure you are only pulling artifacts from specific projects. To get the URLs for these projects you can navigate to https://repo.eclipse.org/index.html#view-repositories and browse for the URL link for the specific project.
 
 
 
== Deploying artifacts to repo.eclipse.org ==
 
== Deploying artifacts to repo.eclipse.org ==
  
To deploy artifacts to repo.eclipse.org you will need to use Hudson (http://hudson.eclipse.org) to configure a job for deploying your artifacts.
+
To deploy artifacts to repo.eclipse.org you will need to use Jenkins (http://ci.eclipse.org) to configure a job for deploying your artifacts.
  
It is recommended that you use '''JDK 7''' or higher as we have seen SSL Handshake issues when using JDK 6.
+
It is recommended that you use '''JDK 8''' or higher as we have seen SSL Handshake issues when using JDK 7 and lower.
  
 
=== Initial Maven POM setup ===
 
=== Initial Maven POM setup ===
  
Before Hudson can deploy your project's artifacts to Nexus you will need to do some setup on the Maven side to add a [http://maven.apache.org/pom.html#Distribution_Management "distributionManagement"] section to your project pom. An example below:
+
Before Jenkins can deploy your project's artifacts to Nexus you will need to do some setup on the Maven side to add a [http://maven.apache.org/pom.html#Distribution_Management "distributionManagement"] section to your project pom. An example below:
  
 
<pre>
 
<pre>
Line 60: Line 71:
 
Replace instances of the word "project" with your project's name.
 
Replace instances of the word "project" with your project's name.
  
Note: It is important to ensure your ID's are "repo.eclipse.org" as the Hudson instance is configured to use these IDs.
+
Note: It is important to ensure your ID's are "repo.eclipse.org" as the Jenkins instance is configured to use these IDs.
  
 
If you want to keep several snapshot versions use:
 
If you want to keep several snapshot versions use:
Line 69: Line 80:
 
</pre>
 
</pre>
  
=== Hudson Job Setup ===
+
Note: this tag is [https://cwiki.apache.org/confluence/display/MAVEN/Maven+3.x+Compatibility+Notes#Maven3.xCompatibilityNotes-Non-uniqueSnapshotDeployments ignored by Maven 3.x].
  
Using http://hudson.eclipse.org you will need to configure Maven to run the "deploy" goal.
+
=== Jenkins Job Setup ===
 +
 
 +
Using Jenkins you will need to configure Maven to run the "deploy" goal.
  
 
There are 2 ways you might want to do this:
 
There are 2 ways you might want to do this:
  
# Simply add the "deploy" goal as one of your Maven goals as part of your build
+
# Use the "deploy" goal as one of your Maven goals as part of your build. Be careful while doing that to not specify duplicate goals (e.g., <code>mvn verify deploy</code> will execute all phases up to <code>verify</code> twice).
 
# Create separate jobs, one for building and one for deploying (if you want more control over when to deploy)
 
# Create separate jobs, one for building and one for deploying (if you want more control over when to deploy)
 
  
 
If you decided to go with creating separate jobs, your deploy job will need access to your build job's workspace, an easy way of making this work is to configure the build job, and the deploy job with the optional '''Use custom workspace''' configuration under '''Advanced project options'''.
 
If you decided to go with creating separate jobs, your deploy job will need access to your build job's workspace, an easy way of making this work is to configure the build job, and the deploy job with the optional '''Use custom workspace''' configuration under '''Advanced project options'''.
 
 
Example:
 
Example:
  
Line 87: Line 98:
 
Replace '''<your build job project name>''' with the name of your project job, for example if your build job was named '''''cbi-maven-plugins-build''''' and your project '''cbi''', then your Directory should be '''''/jobs/genie.cbi/cbi-maven-plugins-build/workspace/'''''. This setting should be configured in both your Build job and Deploy jobs.
 
Replace '''<your build job project name>''' with the name of your project job, for example if your build job was named '''''cbi-maven-plugins-build''''' and your project '''cbi''', then your Directory should be '''''/jobs/genie.cbi/cbi-maven-plugins-build/workspace/'''''. This setting should be configured in both your Build job and Deploy jobs.
  
 +
{{important|Shared workspaces|This only applies to JIPP instances on our old infrastructure. Shared workspaces are not supported on our new cluster-based infrastructure.}}
  
Finally your deploy job should invoke an instance of Maven 3 with the "deploy" goal. The only additional option you need to ensure that's configured is to click '''Advanced''' and configure the '''Settings''' option and set it to '''Deploy to repo.eclipse.org'''. This custom settings file contains the necessary credentials in order for you to deploy to repo.eclipse.org.
+
 
 +
<del>Finally your deploy job should invoke an instance of Maven 3 with the "deploy" goal. The only additional option you need to ensure that's configured is to click '''Advanced''' and configure the '''Settings''' option and set it to '''Deploy to repo.eclipse.org'''. This custom settings file contains the necessary credentials in order for you to deploy to repo.eclipse.org.</del>
  
 
[[Image:deploy_settings.jpg]]
 
[[Image:deploy_settings.jpg]]
 +
 +
'''Update 29.03.2017:''' This is not longer necessary when you want to deploy to '''repo.eclipse.org''' or '''repo.locationtech.org'''. The credentials have been merged into the general Maven settings.xml file that all JIPPs are using.
  
 
== Deploying a jar to repo.eclipse.org ==
 
== Deploying a jar to repo.eclipse.org ==
  
It is possible to use the Maven '''deploy:deploy-file''' goal to push a jar file into repo.eclipse.org via hudson.eclipse.org. For every jar you wish to push into repo.eclipse.org an associating pom.xml file is necessary.
+
It is possible to use the Maven '''deploy:deploy-file''' goal to push a jar file into https://repo.eclipse.org via Jenkins. For every jar you wish to push into https://repo.eclipse.orgrepo.eclipse.org an associating pom.xml file is necessary.
  
 
The simplest pom.xml can be as follows:
 
The simplest pom.xml can be as follows:
Line 106: Line 121:
 
</project>
 
</project>
 
</pre>
 
</pre>
 
+
=== Configuring Jenkins for mvn deploy:deploy-file ===
hudson.eclipse.org has access to the same /shared as build.eclipse.org so placing your files somewhere there will allow hudson to be able to find it.
+
 
+
=== Configuring Hudson for mvn deploy:deploy-file ===
+
  
 
There are 3 settings which need to be configured:
 
There are 3 settings which need to be configured:
Line 134: Line 146:
 
== Deploying to repo.eclipse.org with Gradle ==
 
== Deploying to repo.eclipse.org with Gradle ==
  
If you are using Gradle in your build job, you can also deploy to '''repo.eclipse.org''' from your HIPP instance as described in the [https://docs.gradle.org/current/userguide/maven_plugin.html#uploading_to_maven_repositories Gradle user guide].
+
If you are using Gradle in your build job, you can also deploy to '''repo.eclipse.org''' from your JIPP instance as described in the [https://docs.gradle.org/current/userguide/maven_plugin.html#uploading_to_maven_repositories Gradle user guide].
 +
 
 +
Include in your gradle script authentication configuration using the settings below, e.g.
 +
<pre>
 +
repositories {
 +
  maven {
 +
    credentials {
 +
      username eclipseRepoUsername
 +
      password eclipseRepoPassword
 +
    }
 +
    authentication {
 +
      basic(BasicAuthentication)
 +
    }
 +
  }
 +
}
 +
</pre>
  
Webmaster will need to setup the Gradle plugin in your HIPP and provide '''~/.gradle/gradle.properties''' with the following two variables:
+
Webmaster will need to setup the Gradle plugin in your JIPP and provide '''~/.gradle/gradle.properties''' with the following two variables:
 
<pre>
 
<pre>
eclipseRepoUsername
+
eclipseRepoUsername=xxx
eclipseRepoPassword
+
eclipseRepoPassword=yyy
 
</pre>
 
</pre>
  
Please file [https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Community&component=Hudson a bug] against Eclipse Foundation > Community > Hudson for that.
+
Please file [https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Community&component=CI-Jenkins a bug] against Eclipse Foundation > Community > CI-Jenkins for that.

Latest revision as of 04:26, 21 April 2020

Note.png
This page provides information how to publish a Java project to the Nexus repository instance running at repo.eclipse.org. Readers are expected to be familiar with Maven concepts and Maven repository publishing. If this is not the case, we strongly suggest readers to first read the basics from Sonatype's documentation and the Apache Maven Deploy plugin.


Eclipse Nexus Instance

The Eclipse Nexus instance is hosted at: https://repo.eclipse.org

This repository allows Eclipse projects to publish their build artifacts into a centralized repository hosted by EMO.

Notes:

  • Snapshots older than 7-days are automatically removed on a weekly basis with the minimum of 1 snapshot being retained.
  • All snapshots for a given GAV are automatically removed 14 days after release.
  • All snapshots not being no requested in the last 360 days will be automatically removed.

Getting a Nexus repository for your Project

File a Bug and specify what project you'd like a Nexus repo for.

3 repositories are typically created:

Projects can only publish to these repositories from their Jenkins instance. Committers cannot do anything administrative on the instance.

Pulling artifacts from Nexus

To use repo.eclipse.org to pull artifacts for your project there are a few URLs that can be used.

Releases Group

https://repo.eclipse.org/content/repositories/releases/

This URL is a top-level aggregate of all project releases repositories. This URL is recommended if you just want to pull in releases from any project hosting artifacts on repo.eclipse.org

Snapshots Group

https://repo.eclipse.org/content/repositories/snapshots/

This URL is a top-level aggregate of all project snapshots repositories. This URL is useful for developers who want to pull in artifacts that may have not yet been released usually nightlies.

Project Specific Repos

Finally you can also use a project specific repo if you only want to ensure you are only pulling artifacts from specific projects. To get the URLs for these projects you can navigate to https://repo.eclipse.org/index.html#view-repositories and browse for the URL link for the specific project.

Deploying artifacts to repo.eclipse.org

To deploy artifacts to repo.eclipse.org you will need to use Jenkins (http://ci.eclipse.org) to configure a job for deploying your artifacts.

It is recommended that you use JDK 8 or higher as we have seen SSL Handshake issues when using JDK 7 and lower.

Initial Maven POM setup

Before Jenkins can deploy your project's artifacts to Nexus you will need to do some setup on the Maven side to add a "distributionManagement" section to your project pom. An example below:

  <distributionManagement>
    <repository>
      <id>repo.eclipse.org</id>
      <name>Project Repository - Releases</name>
      <url>https://repo.eclipse.org/content/repositories/project-releases/</url>
    </repository>
    <snapshotRepository>
      <id>repo.eclipse.org</id>
      <name>Project Repository - Snapshots</name>
      <url>https://repo.eclipse.org/content/repositories/project-snapshots/</url>
    </snapshotRepository>
  </distributionManagement>

Replace instances of the word "project" with your project's name.

Note: It is important to ensure your ID's are "repo.eclipse.org" as the Jenkins instance is configured to use these IDs.

If you want to keep several snapshot versions use:

    <snapshotRepository>
      <uniqueVersion>true</uniqueVersion>
      ...

Note: this tag is ignored by Maven 3.x.

Jenkins Job Setup

Using Jenkins you will need to configure Maven to run the "deploy" goal.

There are 2 ways you might want to do this:

  1. Use the "deploy" goal as one of your Maven goals as part of your build. Be careful while doing that to not specify duplicate goals (e.g., mvn verify deploy will execute all phases up to verify twice).
  2. Create separate jobs, one for building and one for deploying (if you want more control over when to deploy)

If you decided to go with creating separate jobs, your deploy job will need access to your build job's workspace, an easy way of making this work is to configure the build job, and the deploy job with the optional Use custom workspace configuration under Advanced project options. Example:

Custom workspace.jpg

Replace <your build job project name> with the name of your project job, for example if your build job was named cbi-maven-plugins-build and your project cbi, then your Directory should be /jobs/genie.cbi/cbi-maven-plugins-build/workspace/. This setting should be configured in both your Build job and Deploy jobs.

Important.png
Shared workspaces
This only applies to JIPP instances on our old infrastructure. Shared workspaces are not supported on our new cluster-based infrastructure.


Finally your deploy job should invoke an instance of Maven 3 with the "deploy" goal. The only additional option you need to ensure that's configured is to click Advanced and configure the Settings option and set it to Deploy to repo.eclipse.org. This custom settings file contains the necessary credentials in order for you to deploy to repo.eclipse.org.

Deploy settings.jpg

Update 29.03.2017: This is not longer necessary when you want to deploy to repo.eclipse.org or repo.locationtech.org. The credentials have been merged into the general Maven settings.xml file that all JIPPs are using.

Deploying a jar to repo.eclipse.org

It is possible to use the Maven deploy:deploy-file goal to push a jar file into https://repo.eclipse.org via Jenkins. For every jar you wish to push into https://repo.eclipse.orgrepo.eclipse.org an associating pom.xml file is necessary.

The simplest pom.xml can be as follows:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.eclipse.jdt</groupId>
  <artifactId>org.eclipse.jdt.core</artifactId>
  <version>3.9.0.v20130313-2254</version>
</project>

Configuring Jenkins for mvn deploy:deploy-file

There are 3 settings which need to be configured:

  1. Goals: deploy:deploy-file
  2. Properties:
    groupId=<groupId>
    artifactId=<artifactId>
    version=<version>
    packaging=jar
    file=/shared/path/to/file.jar
    repositoryId=repo.eclipse.org
    url=<Your project's repo URL to push jar into>
  3. POM File: /path/to/pom.xml

For example: Mvn-deploy-file.png


Note: You will also need to configure your settings file to use Deploy to repo.eclipse.org per instructions in the previous section for deploying artifacts.

Deploying to repo.eclipse.org with Gradle

If you are using Gradle in your build job, you can also deploy to repo.eclipse.org from your JIPP instance as described in the Gradle user guide.

Include in your gradle script authentication configuration using the settings below, e.g.

repositories {
  maven {
    credentials {
      username eclipseRepoUsername
      password eclipseRepoPassword
    }
    authentication {
      basic(BasicAuthentication)
    }
  }
}

Webmaster will need to setup the Gradle plugin in your JIPP and provide ~/.gradle/gradle.properties with the following two variables:

eclipseRepoUsername=xxx
eclipseRepoPassword=yyy

Please file a bug against Eclipse Foundation > Community > CI-Jenkins for that.

Back to the top