オライリーの『Jenkins』を献本いただいたので、読みながらJenkinsの勉強をしています。
開発でJavaを使っている場合は、Jenkinsと一緒にMavenリポジトリがあるととても便利です。Mavenリポジトリは、JarやWarだけでなく、Javadocなどのドキュメントも簡単にWebで公開できるようになります。よくみかけるのは、Apache+WebDavなどで作るリポジトリですが、もっと手軽に、Jenkinsのみで作る方法を考えてみました。
まずはJenkinsが利用するローカルリポジトリの設定を確認
Jenkinsの設定画面には、ローカルリポジトリの場所を設定できるところがあります。
- Defaultならば「${JENKINS_HOME}/.m2/repository」
- Local to the executorならば、同時実行ビルドできる数だけ「/var/lib/jenkins/maven-repositories/1」「/var/lib/jenkins/maven-repositories/2」というようにリポジトリができる
- 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を叩いてください。
恐らくReadmeファイルが見えるはずです。userContentディレクトリを使うことで、JenkinsをWebサーバのように使うことができます。userContentを活用して、ローカルリポジトリのリンクをここに作ります。
例: ln -s /var/lib/jenkins/.m2/repository/ /var/lib/jenkins/userContent/repository
これだけで、
が公開用のMavenリポジトリのURLになります。JOBの中では「deploy」ではなく「install」を使うだけでOK。
まとめ
今回の方法ですと、公開リポジトリは読み込み専用になります。書き込みもしたい!場合は、Apacheなどでがんばる必要があります。
ただ、公開リポジトリに書き込みができると、Jenkinsと違った環境でビルドした成果物がデプロイされたり、あやまって消されてしまったりと、共用ならではの問題が出てきてしまいます。個人的には、「成果物(JarやWar)はJenkinsでビルドしたものを正とする」というルールがいいんじゃないかなぁと思います。
インストールすればWeb化らの設定でなんでもできちゃうJenkinsはすばらしいですね。Jenkinsはレガシーなシステムの救世主になりえるツールのように感じています。CI重要。
最後に、献本してくださった@ikeike443さんに感謝いたします。とても奥が深くて勉強になっています。
[…] ルである Jenkinsをたった1コマンドで公開用Mavenリポジトリにしてしまう方法 #jenkinsja https://daipresents.com/2012/post-4367/ 宇宙に行きたい maven でローカルレポジトリの場所を変更して実行する […]
いいねいいね