Jenkinsをたった1コマンドで公開用Mavenリポジトリにしてしまう方法 #jenkinsja

Jenkins - John Ferguson Smart

オライリーの『Jenkins』を献本いただいたので、読みながらJenkinsの勉強をしています。

開発でJavaを使っている場合は、Jenkinsと一緒にMavenリポジトリがあるととても便利です。Mavenリポジトリは、JarやWarだけでなく、Javadocなどのドキュメントも簡単にWebで公開できるようになります。よくみかけるのは、Apache+WebDavなどで作るリポジトリですが、もっと手軽に、Jenkinsのみで作る方法を考えてみました。

まずはJenkinsが利用するローカルリポジトリの設定を確認

000

Jenkinsの設定画面には、ローカルリポジトリの場所を設定できるところがあります。

  1. Defaultならば「${JENKINS_HOME}/.m2/repository」
  2. Local to the executorならば、同時実行ビルドできる数だけ「/var/lib/jenkins/maven-repositories/1」「/var/lib/jenkins/maven-repositories/2」というようにリポジトリができる
  3. Local to the workspaceならば、Jobごとに「/var/lib/jenkins/job/daipresents-job/ws/.repository/」というようにリポジトリができる

通常は1のように、すべてのJobのライブラリが1つのリポジトリに集まる形で十分だと思います。この設定がデフォルトになっていることを確認します。3の場合は、JOBごとに依存するライブラリのダウンロードが始まるので、ディスクを食べたり、初回ビルドが遅かったりします。

次に公開用ディレクトリであるuserContentにリポジトリのシムリンクを作る

Jenkins』にも書かれているのですが、Jenkinsのホームディレクトリ(rpmで入れると/var/lib/jenkins)には「userContent」というフォルダがあり、このフォルダは公開用のフォルダになっています。例えば、このフォルダをブラウザで確認したい場合は、以下のURLを叩いてください。

http://your-server-name/userContent/

恐らくReadmeファイルが見えるはずです。userContentディレクトリを使うことで、JenkinsをWebサーバのように使うことができます。userContentを活用して、ローカルリポジトリのリンクをここに作ります。

例: ln -s /var/lib/jenkins/.m2/repository/ /var/lib/jenkins/userContent/repository

User content - - [Jenkins]

これだけで、

http://your-server-name/userContent/repository

が公開用のMavenリポジトリのURLになります。JOBの中では「deploy」ではなく「install」を使うだけでOK。

まとめ

今回の方法ですと、公開リポジトリは読み込み専用になります。書き込みもしたい!場合は、Apacheなどでがんばる必要があります。

ただ、公開リポジトリに書き込みができると、Jenkinsと違った環境でビルドした成果物がデプロイされたり、あやまって消されてしまったりと、共用ならではの問題が出てきてしまいます。個人的には、「成果物(JarやWar)はJenkinsでビルドしたものを正とする」というルールがいいんじゃないかなぁと思います。

インストールすればWeb化らの設定でなんでもできちゃうJenkinsはすばらしいですね。Jenkinsはレガシーなシステムの救世主になりえるツールのように感じています。CI重要。

最後に、献本してくださった@ikeike443さんに感謝いたします。とても奥が深くて勉強になっています。

“Jenkinsをたった1コマンドで公開用Mavenリポジトリにしてしまう方法 #jenkinsja” への 1 件のフィードバック

コメントは受け付けていません。