Apache Archivaで自前のMavenリポジトリを作る
Apache Archivaは、Apache Mavenのリポジトリマネージャ。 リポジトリマネージャを使用すると、CentralのようなMavenリポジトリを自前で用意できる。
競合製品には、Nexus Repository Manager OSSやJFrog Artifactoryがある。
CentOS 7へArchiva 2.2.4をインストール
CentOS 7.7のminimal-installへのインストール。ホストのIPアドレスは``192.168.0.11``とする。
ArchivaはLinuxのほかにWindowsやSolarisにも対応している。 また、インストールしたディレクトリと別のディレクトリから実行したり、リポジトリのバックエンドにCassandraを使用したりもできる。 warファイルもあるのでサーブレットとして配備も出来る。
Javaのインストール
Java 1.8をインストールする。 Java 11をインストールすると、Archivaの起動に失敗する。
yum -y install java-1.8.0-openjdk-headless
Archivaをダウンロードして展開する
https://archiva.apache.org/download.cgiからダウンロード。
cd /opt curl -O http://ftp.kddilabs.jp/infosystems/apache/archiva/2.2.4/binaries/apache-archiva-2.2.4-bin.tar.gz tar xzf apache-archiva-2.2.4-bin.tar.gz rm apache-archiva-2.2.4-bin.tar.gz
Quick Startで試してみる
バックグラウンドで起動
cd /opt/apache-archiva-2.2.4 bin/archiva start
停止はbin/archiva stop
。
ファイアウォールの例外に8080番ポートを追加
firewall-cmd --add-port 8080/tcp firewall-cmd --runtime-to-permanent
Archivaにアクセスして、管理者のアカウントを作成する
http://192.168.0.11:8080/
にアクセスCreate Admin User
をクリック- パスワードとメールアドレスを設定する
この時点で出来ること
- Maven Centralのミラー
- RELEASE用のリポジトリへのアクセス
- SNAPSHOT用のリポジトリへのアクセス
- 管理者(admin)ユーザはリポジトリの更新と参照が可能
- ゲスト(guest)ユーザはリポジトリの参照が可能
デフォルトで用意されているリポジトリ
RELEASE用リポジトリ
http://192.168.0.11:8080/repository/internal
- バージョンに
-SNAPSHOT
がついていないプロジェクトの成果物の配備先 - Maven Centralからミラーしたファイルの保管
SNAPSHOT用のリポジトリ
http://192.168.0.11:8080/repository/snapshots
- バージョンに
-SNAPSHOT
がついているプロジェクトの成果物の配備先
プロジェクトを配備するためのユーザを追加
- GUIに管理者ユーザでログイン
- GUIの左にあるメニューから、
USERS
の下のManage
を選択 Users List
の下のAdd
を選択してユーザを追加、Validated
はチェックしておいた方が良さそう、必要事項を記入したらSave
をクリック- 追加したユーザの
Edit
をクリック、さらにEdit Roles
を選択、参照するリポジトリのRepository Observer
をチェック、更新するリポジトリのRepository Manager
をチェック、Update
をクリック
Mavenでプロジェクトを配備する
settings.xml
にリポジトリやミラー、ユーザ名/パスワードを設定。
各プロジェクトのpom.xml
で配備先のリポジトリを指定する。
配備はmvn deploy
。
settings.xml
settings.xml
は通常${user.home}/.m2/settings.xml
にある。
mvn
のオプション-s
で指定可能。
詳細はhttps://maven.apache.org/settings.htmlを参照。
- settings.xml
<settings> <servers> <!-- リポジトリごとに、ユーザの認証情報を記述 --> <!-- ここのserver/idが、後続のmirror/idやprofile/idと一致していること --> <server> <id>archiva.internal</id> <username>username</username> <password>password</password> </server> <server> <id>archiva.snapshots</id> <username>username</username> <password>password</password> </server> </servers> <!-- Maven CentralのミラーとしてRELEASE用リポジトリを設定 --> <mirrors> <mirror> <id>archiva.internal</id> <name>Archiva Managed Internal Release Repository</name> <url>http://192.168.0.11:8080/repository/internal</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors> <!-- 配備先のリポジトリを登録 --> <profiles> <profile> <id>archiva repo</id> <activation> <activeByDefault>true</activeByDefault> </activation> <repositories> <repository> <id>archiva.internal</id> <name>Archiva Managed Internal Release Repository</name> <url>http://192.168.0.11:8080/repository/internal</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <id>archiva.snapshots</id> <name>Archiva Managed Internal Snapshot Repository</name> <url>http://192.168.0.11:8080/repository/snapshots</url> <releases> <enabled>false</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> </profile> </profiles> </settings>
pom.xml
- pom.xml
<project> <!-- その他の設定は割愛 --> <!-- RELEASE用とSNAPSHOT用のリポジトリを設定 --> <!-- repository/idを、settings.xmlの*/idと一致させること --> <!-- 配備が失敗する場合は、まずidの不一致を疑う --> <distributionManagement> <repository> <id>archiva.internal</id> <name>Archiva Managed Internal Release Repository</name> <url>http://192.168.0.11:8080/repository/internal</url> </repository> <snapshotRepository> <id>archiva.snapshots</id> <name>Archiva Managed Internal Snapshot Repository</name> <url>http://192.168.0.11:8080/repository/snapshots</url> </snapshotRepository> </distributionManagement> </project>
配備
mvn deploy
deploy
を実行するプラグインの詳細はApache Maven Deploy Pluginを参照。
GUIのhttp://192.168.169.206:8080/#search
やhttp://192.168.0.11:8080/#browse
から配備されたファイルを確認できる。
Staging Repositories
RELEASEの成果物を、まずはStaging用リポジトリに配備。 Staging用リポジトリを指定して成果物を取得し、テストする。 動作を確認した後にリリース用リポジトリにマージする。 ユーザはリリース用リポジトリから成果物を取得する。
まずは、リポジトリの準備が必要。
リポジトリ作成時に、Staging Repository
にチェックを付ける。
<id>
と<id>-stage
のリポジトリができる。
Mavenで配備するときは、<id>-stage
の方に配備。
<id>-stage
から成果物を取得してテストする。
テストが完了したら、GUIのRepositories
から、
<id>-stage
のActions
をクリックしMerge this repository
を選択。
リリース用のリポジトリ<id>
を選択してマージする。
実際にはリポジトリ内の成果物を全てコピーしている。
ユーザの権限設定がリポジトリ単位であることを考えると、 グループごとにリポジトリを作成した方が運用方法として正しそう。
Repository Groups
Virtual Repositoryとも呼んでいる。 複数のリポジトリを一つのリポジトリに見せる。 このリポジトリは参照のみ可能。
Staging Repositoriesで書いたようにプロジェクトごとに複数のリポジトリを作成すると、
Mavenのsettings.xml
にすべてのリポジトリを設定して最新に保つのが大変。
Repository Gorupsでまとめておくと、参照に関しては一つのリポジトリを設定するだけで済む。
RELEASEの配備先はプロジェクトのStage用リポジトリを設定。 最後のマージはGUIから。
- settings.xml
<settings> <servers> <!-- virtual repository、ゲストが必要なリポジトリを参照可能なら認証情報は不要 --> <server> <id>archiva.repo</id> <username>username</username> <password>password</password> </server> <!-- SNAPSHOT用 --> <server> <id>archiva.snapshots</id> <username>username</username> <password>password</password> </server> <!-- RELEASEのstaging用 --> <server> <id>project.staging</id> <username>username</username> <password>password</password> </server> </servers> <mirrors> <!-- ミラーはvirtural repositoryを指定 --> <mirror> <id>archiva.repo</id> <name>Archiva Managed Internal Release Repository</name> <url>http://192.168.0.11:8080/repository/maven2</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors> <profiles> <profile> <id>archiva repo</id> <activation> <activeByDefault>true</activeByDefault> </activation> <repositories> <repository> <id>archiva.repo</id> <name>Archiva Managed Virtual Release Repository</name> <url>http://192.168.0.11:8080/repository/maven2</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <id>archiva.snapshots</id> <name>Archiva Managed Internal Snapshot Repository</name> <url>http://192.168.0.11:8080/repository/snapshots</url> <releases> <enabled>false</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> <repository> <id>project.staging</id> <name>Archiva Managed Internal Release Repository</name> <url>http://192.168.0.11:8080/repository/project-stage</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> </profile> </profiles> </settings>
- pom.xml
<distributionManagement> <!-- RELEASEのstaging用 --> <repository> <id>project.staging</id> <url>http://192.168.0.11:8080/repository/project-stage</url> </repository> <!-- SNAPSHOT用 --> <snapshotRepository> <id>archiva.snapshots</id> <url>http://192.168.0.11:8080/repository/snapshots</url> </snapshotRepository> </distributionManagement>