Artifactory

2018年8月24日

※Artifactoryについての全投稿は/tag/artifactoryにあるので参照されたい

ビルド成果物をアーティファクトというらしいが、これは要するにjarファイルとその依存を記述したpom.xml,ivy.xml等のファイルがいっしょになったもの。
例えば、自分で記述したプログラムのjarファイルの実行にcommons-loggingが必要であれば、これらのxmlにそれが記述され、その状態でリポジトリに登録される。

また、プログラムを改修してバージョンが変更になった場合には、再度リポジトリに登録するが、以前のバージョンを必要とするユーザのために歴代のバージョンをすべて保存しておく。

さらに、世界中で公開されているアーティファクトがすべて収められた公開リポジトリもあり、ここに有名どころはすべて揃っている。

前者をインハウスリポジトリ、後者をセントラルリポジトリとここでは呼ぶ。

artifactoryを適当なサーバにインストールすることにより、インハウスリポジトリ(自分達のリポジトリ)を作成することができるのだが、しかしセントラルリポジトリのキャッシュとしても使用することができる。つまり、artifactory一つあれば両方の役割を果たしてくれる。

インストール

ここではCentOS6.5にインストールするので、以下からRPMをダウンロードしてインストール。

http://www.jfrog.com/open-source/

インストールされるファイルは以下の通り

/etc/init.d/artifactory
/etc/opt/jfrog
/etc/opt/jfrog/artifactory
/etc/opt/jfrog/artifactory/artifactory.config.xml
/etc/opt/jfrog/artifactory/artifactory.system.properties
/etc/opt/jfrog/artifactory/default
/etc/opt/jfrog/artifactory/logback.xml
/etc/opt/jfrog/artifactory/mimetypes.xml
/opt/jfrog
/opt/jfrog/artifactory
/opt/jfrog/artifactory/bin
/opt/jfrog/artifactory/bin/artifactory-service.exe
/opt/jfrog/artifactory/bin/artifactory.bat
/opt/jfrog/artifactory/bin/artifactory.default
/opt/jfrog/artifactory/bin/artifactory.sh
/opt/jfrog/artifactory/bin/artifactoryctl
/opt/jfrog/artifactory/bin/configure.mysql.sh
/opt/jfrog/artifactory/bin/installService.bat
/opt/jfrog/artifactory/bin/installService.sh
/opt/jfrog/artifactory/bin/recover.backup.sh
/opt/jfrog/artifactory/bin/uninstallService.bat
/opt/jfrog/artifactory/bin/uninstallService.sh
/opt/jfrog/artifactory/misc
/opt/jfrog/artifactory/misc/db
/opt/jfrog/artifactory/misc/db/createdb
/opt/jfrog/artifactory/misc/db/createdb/createdb_mssql.sql
/opt/jfrog/artifactory/misc/db/createdb/createdb_mssqlBlob.sql
/opt/jfrog/artifactory/misc/db/createdb/createdb_mssqlRecreateBlob.sql
/opt/jfrog/artifactory/misc/db/createdb/createdb_mysql.sql
/opt/jfrog/artifactory/misc/db/mssql.properties
/opt/jfrog/artifactory/misc/db/mysql.properties
/opt/jfrog/artifactory/misc/db/oracle.properties
/opt/jfrog/artifactory/misc/db/postgresql.properties
/opt/jfrog/artifactory/misc/ha
/opt/jfrog/artifactory/misc/ha/ha-node.properties.template
/opt/jfrog/artifactory/misc/service
/opt/jfrog/artifactory/misc/service/artifactory
/opt/jfrog/artifactory/misc/service/setenv.sh
/opt/jfrog/artifactory/misc/tomcat
/opt/jfrog/artifactory/misc/tomcat/NGNIX.txt
/opt/jfrog/artifactory/misc/tomcat/artifactory.httpd.conf
/opt/jfrog/artifactory/misc/tomcat/artifactory.xml
/opt/jfrog/artifactory/misc/tomcat/index.html
/opt/jfrog/artifactory/misc/tomcat/logging.properties
/opt/jfrog/artifactory/misc/tomcat/server.xml
/opt/jfrog/artifactory/misc/tomcat/web.xml
/opt/jfrog/artifactory/misc/websphere
/opt/jfrog/artifactory/misc/websphere/README.txt
/opt/jfrog/artifactory/misc/websphere/web.xml
/opt/jfrog/artifactory/tomcat
/opt/jfrog/artifactory/tomcat/LICENSE
/opt/jfrog/artifactory/tomcat/NOTICE
/opt/jfrog/artifactory/tomcat/RELEASE-NOTES
/opt/jfrog/artifactory/tomcat/RUNNING.txt
/opt/jfrog/artifactory/tomcat/bin
/opt/jfrog/artifactory/tomcat/bin/bootstrap.jar
/opt/jfrog/artifactory/tomcat/bin/catalina-tasks.xml
/opt/jfrog/artifactory/tomcat/bin/catalina.bat
/opt/jfrog/artifactory/tomcat/bin/catalina.sh
/opt/jfrog/artifactory/tomcat/bin/commons-daemon-native.tar.gz
/opt/jfrog/artifactory/tomcat/bin/commons-daemon.jar
/opt/jfrog/artifactory/tomcat/bin/configtest.bat
/opt/jfrog/artifactory/tomcat/bin/configtest.sh
/opt/jfrog/artifactory/tomcat/bin/daemon.sh
/opt/jfrog/artifactory/tomcat/bin/digest.bat
/opt/jfrog/artifactory/tomcat/bin/digest.sh
/opt/jfrog/artifactory/tomcat/bin/setclasspath.bat
/opt/jfrog/artifactory/tomcat/bin/setclasspath.sh
/opt/jfrog/artifactory/tomcat/bin/setenv.sh
/opt/jfrog/artifactory/tomcat/bin/shutdown.bat
/opt/jfrog/artifactory/tomcat/bin/shutdown.sh
/opt/jfrog/artifactory/tomcat/bin/startup.bat
/opt/jfrog/artifactory/tomcat/bin/startup.sh
/opt/jfrog/artifactory/tomcat/bin/tomcat-juli.jar
/opt/jfrog/artifactory/tomcat/bin/tomcat-native.tar.gz
/opt/jfrog/artifactory/tomcat/bin/tool-wrapper.bat
/opt/jfrog/artifactory/tomcat/bin/tool-wrapper.sh
/opt/jfrog/artifactory/tomcat/bin/version.bat
/opt/jfrog/artifactory/tomcat/bin/version.sh
/opt/jfrog/artifactory/tomcat/conf
/opt/jfrog/artifactory/tomcat/conf/Catalina
/opt/jfrog/artifactory/tomcat/conf/Catalina/localhost
/opt/jfrog/artifactory/tomcat/conf/Catalina/localhost/artifactory.xml
/opt/jfrog/artifactory/tomcat/conf/catalina.policy
/opt/jfrog/artifactory/tomcat/conf/catalina.properties
/opt/jfrog/artifactory/tomcat/conf/logging.properties
/opt/jfrog/artifactory/tomcat/conf/server.xml
/opt/jfrog/artifactory/tomcat/conf/web.xml
/opt/jfrog/artifactory/tomcat/lib
/opt/jfrog/artifactory/tomcat/lib/annotations-api.jar
/opt/jfrog/artifactory/tomcat/lib/catalina.jar
/opt/jfrog/artifactory/tomcat/lib/el-api.jar
/opt/jfrog/artifactory/tomcat/lib/servlet-api.jar
/opt/jfrog/artifactory/tomcat/lib/tomcat-api.jar
/opt/jfrog/artifactory/tomcat/lib/tomcat-coyote.jar
/opt/jfrog/artifactory/tomcat/lib/tomcat-jni.jar
/opt/jfrog/artifactory/tomcat/lib/tomcat-util-scan.jar
/opt/jfrog/artifactory/tomcat/lib/tomcat-util.jar
/opt/jfrog/artifactory/tomcat/logs
/opt/jfrog/artifactory/tomcat/temp
/opt/jfrog/artifactory/tomcat/webapps
/opt/jfrog/artifactory/tomcat/webapps/ROOT
/opt/jfrog/artifactory/tomcat/webapps/ROOT/index.html
/opt/jfrog/artifactory/tomcat/work
/opt/jfrog/artifactory/webapps
/opt/jfrog/artifactory/webapps/artifactory.war
/opt/jfrog/doc
/opt/jfrog/doc/artifactory-4.0.1
/opt/jfrog/doc/artifactory-4.0.1/COPYING
/opt/jfrog/doc/artifactory-4.0.1/COPYING.LESSER
/opt/jfrog/doc/artifactory-4.0.1/README.txt
/opt/jfrog/doc/artifactory-4.0.1/Third-Parties-Usage-About-Box.html
/var/opt/jfrog/artifactory
/var/opt/jfrog/artifactory/etc
/var/opt/jfrog/artifactory/misc
/var/opt/jfrog/artifactory/tomcat
/var/opt/jfrog/artifactory/webapps
/var/opt/jfrog/run

サービスとして登録されるので、これを起動する。

service artifactory start

すると、ビルトインのtomcatが起動するのだが、ポートは8081になっているので、既に別の目的のtomcatが起動していても問題ない。

–> ポートを変更したい場合は/opt/jfrog/artifactory/tomcat/conf/server.xmlを変更する。

このサーバのIPが192.168.1.177だとすると、http://192.168.1.177:8081/でアクセスできる。

デフォルトのデータベースはapache derbyのembeddedバージョンで、これは/var/opt/jfrog/artifactory/dataに作成される。
mysqlも使用可能のようだ。

管理者ログイン

管理者はadmin/passwordでログイン可能。

http://192.168.1.177:8081/の管理画面から様々な操作が可能になっている。

リポジトリの種類

ローカル

Artifactory自体がリポジトリであるから、「ローカル」つまり自分達で作成したアーティファクトを登録するリポジトリが存在する。当然Artifactoryの中だけで、外に出ていくことはない。
管理画面左側メニューのAdminからRepositories>Localを選択すれば、ローカルのリポジトリがあらかじめ複数用意されているのがわかる。

いずれか都合の良いものを選択してそこに登録すればよいが、説明の都合上libs-release-localを選ぶものとする。

リモート

外部のリポジトリ参照になる。AdminからRepositories>Remoteを選択すると、ただひとつjcenterだけが登録されていることがわかる。

仮想

自分達のアーティファクトをlibs-release-localに登録し、アーティファクトの参照はlibs-release-localとjcenterの両方を見なければいけないのでは面倒。
さらに、別のローカルリポジトリを使ったり、別のリモートリポジトリを参照したりすると、見るべきリポジトリが増えてしまう。

そのため、「仮想」リポジトリとして、複数のリポジトリを束ねて単一のリポジトリとして見る仕組みがある。AdminからRepositories>Virtualを選択するとそのリストがある。

例えばlibs-releaseという仮想リポジトリは、libs-release-local,ext-release-local,remote_reposを束ねており、さらにremote_reposという仮想リポジトリにはjcenter(デフォルトではただ一つ)が指定されている。

このため、とりあえずlibs-release-localとjcenterのリポジトリを参照するには、libs-releaseという単一のリポジトリを見れば良いことがわかる。

使用するリポジトリの選択

上述したように、artifactoryは単一のリポジトリではなく、複数のリポジトリを提供しており、セントラルリポジトリ(リモート)、インハウスリポジトリ(ローカル)、あるいはそれぞれのスナップショット、ライブラリ用・プラグイン用などいろいろ用意されている。しかし、これらのすべてを使う必要はなく、また必要であれば追加することもできる。

通常リポジトリが複数ある場合には、ビルドツール側で読み込む場合には、それぞれ記述する必要があるようだが、artifactoryでは複数のリポジトリを一つにまとめて提供してくれるようだ。とりあえず、以下を使うことにする。

  • libs-release-local
    インハウスリポジトリ。自分達が登録したものだけが存在する。
  • libs-release
    上のリポジトリとセントラルリポジトリをまとめたもの。セントラルにあるものと、インハウスにあるものを区別なく参照できる。

とりあえずは上の二つを利用することにする。ビルドツールからはそれぞれ以下でアクセスされる。

  • http://192.168.1.177:8081/artifactory/libs-release-local
  • http://192.168.1.177:8081/artifactory/libs-release

当然ながら、書き込みが可能なのは前者だけだが、このときadmin/passwordを指定すればよい。

Artifacts

左側メニューでArtifactsをクリックすると、各リポジトリの一覧とその内容が表示される。jcenter(セントラルリポジトリ)やそれを包含する仮想的なlibs-releaseは中身が膨大なので見る必要はない。

この画面で可能になる重要なことは、インハウスリポジトリであるlibs-release-localの内容を調査、削除、新規作成するなどである。

既にインハウスリポジトリに何らかを登録した場合、libs-release-localを展開していくと、その登録の様子が確認できる。右クリックのコンテキストメニューでその登録を削除することができる。

また、右上の「Deploy」ボタンを使うことにより、セントラルリポジトリに登録されていないサードパーティ製のjarファイルを登録することができる。以下の手順

  • Target Repositoryがlibs-release-localであることを確認
  • Drop file hereにjarファイルをドロップ
  • Deploy as Maven Artifactをチェック
  • Maven Artifactの内容がデフォルトで表示されるので、修正が必要であれば修正する。
  • Deploy jar’s internal POM/General Default POMをチェック
  • 右下のDeployをクリック

リモートリポジトリの追加

ほとんどのartifactは、あらかじめビルトインされたjcenterにあるため、何もしなくても自動的にとってきてくれるのだが、たまにjcenterに無いものが必要になる場合もある。
具体的にはこれ。
* https://mvnrepository.com/artifact/net.auroris/gwt-colorpicker/2.1

これはebiというリポジトリにあるらしい。選択肢としては二つ。

  • ここからjarをダウンロードして、上述したように自分でartifactoryに入れてしまう。
  • ebiリポジトリをartifactoryに登録する。

ここでは後者を行ってみる。

管理画面左側メニューの一番下のAdminでRepository>Remoteを選択。右上の+Newをクリックし、リポジトリの種類を選択(この場合はMaven)、

Repository Keyはただの名前、ここでは「ebi」とする。URLを「http://www.ebi.ac.uk/intact/maven/nexus/content/repositories/ebi-repo/」とする。
これで終了。

管理画面左側の上から二番目のArtifact Repository Browserを見てみると、ebi, ebi-cacheが追加されている。ebiを開いてみると先のnet.auroris.gwt-colorpickerが存在する。

リモートリポジトリを仮想リポジトリに追加

上で追加したリポジトリを仮想リポジトリに追加すれば、gradleなどのアプリ側ではこれまで通り、単一の仮想リポジトリからアーティファクトを探せばよい。
管理画面左側一番下のAdminからRepositories>Virtualを選択。

仮想リポジトリの一覧があり、それぞれがどのリポジトリからひっぱってくるかを示している。

libs-releaseはlibs-release-local,ext-release-local,remote-reposから引っ張ってくるようになっている。
libs-release-local,ext-release-localは仮想ではなく、名前の通りローカルである。remote-reposは仮想であり、これはjcenterのみから引っ張ってくることになっている。

アプリ側で使う単一のリポジトリとしてlibs-releaseを選択するならば、ebiをlibs-releaseか、あるいはremote-reposに追加すればよい。当然remote-reposに追加する。

remote-reposをクリックすると、中身の編集画面になるので、そこでebiの追加ができる。