Analytics/Systems/Archiva

From Wikitech
Jump to: navigation, search

Apache Archiva is a Maven Build Artifact Repository Manager, along the lines of Nexus and Artifactory. WMF uses Archiva as its sole Java build repository, and uses it in a unique way for production deployments of artifacts via Trebuchet (A.K.A. git-deploy) and git-fat.

Our Archiva instance is at archiva.wikimedia.org.

Archiva Setup

Archiva was chosen over other Maven Repository Managers primarily because of its open source nature. It supports all of the features we need, and is 100% open source, so it was the obvious choice. You can see a comparison of Archiva against the other two major Maven Repository Manaagers here.

Our Archiva is configured in a slightly non-standard way. We wanted to have complete control over the build and deploy environments used by developers and by production. Usually, organizations will maintain their own Maven repository so that developers and deployments do not need to download build dependencies from the internet every time they need to build. This is done mainly to reduce network traffic. Proxies are usually maintained between the organization's Maven repository and other Maven repositories out there (e.g. Maven Central, Cloudera, etc.). Dependencies are transparently proxied and cached by the org's Maven repository. Future builds that require cached dependencies will just download them from the org's Maven repository.

In our case, we want all builds to be done with a curated set of build dependencies. Therefore we do not maintain any active proxies to remote Maven repositories. Any time a new dependency is needed, it will be manually added to our Archiva instance. This can be done via the web GUI or via the CLI. Upon Archiva's installation, it was seeded with a base set of artifacts that were needed to build a few projects ( Camus and Kraken). These base artifacts should make it easier to get started with Archiva as the primary build repository for your project.

Development Environment Setup

Deploying to Archiva

Deploying from Archiva using Trebuchet (git-deploy)

Uploading Dependency Artifacts