Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "Services/Nexus"

(Jenkins Job Setup)
(Replaced content with "== This page has been moved to https://github.com/eclipse-cbi/cbi/wiki/Nexus ==")
 
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].}}
+
== This page has been moved to https://github.com/eclipse-cbi/cbi/wiki/Nexus ==
 
+
== 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 ===
+
 
+
[https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/issues File a ticket] and specify what project you'd like a Nexus repo for.
+
 
+
3 repositories are typically created:
+
 
+
* 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'''.
+
 
+
Projects can only publish to these repositories from their [[Jenkins|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 [http://maven.apache.org/pom.html#Distribution_Management "distributionManagement"] section to your project pom. An example below:
+
 
+
<pre>
+
  <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>
+
</pre>
+
 
+
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:
+
<pre>
+
    <snapshotRepository>
+
      <uniqueVersion>true</uniqueVersion>
+
      ...
+
</pre>
+
 
+
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].
+
 
+
=== Jenkins Job Setup ===
+
 
+
Using Jenkins you will need to configure Maven to run the "deploy" goal.
+
 
+
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).
+
 
+
== 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:
+
 
+
<pre>
+
<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>
+
</pre>
+
=== Configuring Jenkins for mvn deploy:deploy-file ===
+
 
+
There are 3 settings which need to be configured:
+
 
+
# Goals: deploy:deploy-file
+
# Properties:
+
#:<pre>
+
#::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>
+
#:</pre>
+
# POM File: /path/to/pom.xml
+
 
+
For example:
+
[[Image: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 [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 JIPP and provide '''~/.gradle/gradle.properties''' with the following two variables:
+
<pre>
+
eclipseRepoUsername=xxx
+
eclipseRepoPassword=yyy
+
</pre>
+
 
+
Please [https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/issues file a ticket] for that.
+

Latest revision as of 14:55, 7 November 2023

This page has been moved to https://github.com/eclipse-cbi/cbi/wiki/Nexus

Back to the top