どうも、G* Advent Calendar 2012、11日目担当、@literaliceです。
さて、突然ですが先日、grails-mongodb-compound-index-attributesというGrailsのプラグインを公開しました。
このプラグインは、GrailsのMongoDBプラグインを拡張し、compound indexにunique属性などを追加できるようにするものです。こんな:
class Book {
static mapping = {
compoundIndex contributor: 1, name: 1, indexAttributes: [name: "idxName", unique: true]
}
String contributor
String name
}
で、この機能はどうせ将来的にMongoDBプラグインに実装されるでしょうし、わざわざGrails本家のプラグインリポジトリに公開するまでもない気がしますね。
以前はこういうとき、Githubをプラグインリポジトリにして公開していました。
が、ナウい方法はCloudBeesのDEV@cloudを使うことです。
DEV@cloudは登録するとJenkinsサーバーとMavenリポジトリ、Gitのリポジトリをもらえます。
Mavenリポジトリはいろいろハウスキーピングしてもらえますし、何よりプライベートリポジトリにできるのがGithubをムリヤリ使う方法に比べてイケてますね。
と言うわけで前置きが長くなりましたが、GrailsプラグインをCloudBees、DEV@cloudで公開する手順を紹介します。
- Grails version
- 2.1.1
手順
- Grailsプラグインを作る
- CloudBeesにアカウントを作る
- releaseプラグインをCloudBees用に設定する
- publish-pluginコマンドでリリース
Grailsプラグインを作る
作ります。例:grails-mongodb-compound-index-attributes
CloudBeesにアカウントを作る
作ります。→CloudBees
releaseプラグインをCloudBees用に設定する
releaseプラグインはGrailsのcreate-pluginコマンドでプラグインを作成すれば入ってるはずです。
このreleaseプラグインを、CloudBees上に作られたWebDAVのMavenリポジトリにリリースするよう設定します。
// BuildConfig.groovy or ~/.grails/settings.groovy
grails.release.scm.enabled = false // プラグインのソースコードはリリースしない
grails.project.repos.default = "releaseRepository" // リリース先未指定時のリリース先
grails.project.repos.releaseRepository.url = "dav:https://repository-[CloudBeesアカウント名].forge.cloudbees.com/release/" // リリース先"releaseRepository"のURL
grails.project.repos.releaseRepository.type = "maven"
grails.project.repos.releaseRepository.username = "[CloudBeesのUser SettingsにあるUsername]"
grails.project.repos.releaseRepository.password = "[CloudBeesのログインパスワード]"
私の場合は、CloudBeesのJenkinsからビルド、リリースしているので、システムプロパティでファイルを渡して、そのファイルから上記設定を読み込むようにしています。その設定ファイルは、CloudBeesに用意されるプライベートなファイルストレージに置いておきます。
例: BuildConfig.groovy
publish-pluginコマンドでリリース
grails publish-plugin --repository=releaseRepository --protocol=webdav
なお、CloudBees上のJenkinsでビルド、リリースする場合は、前述のようにシステムプロパティに認証情報などを記述した設定ファイルのパスを渡し、そのファイルから設定を読み込むようにします。
sh ./grailsw -DhogehogeFile=/private/[CloudBeesアカウント名]/grails/credential.properties publish-plugin --repository=releaseRepository --protocol=webdav --non-interactive
公開したプラグインをGrailsプロジェクトで使用する
このようにプラグインを公開すると、Grailsプロジェクトから以下のようにして使用できるようになります。
//Build.groovy
grails.project.dependency.resolution = {
// ...
repositories {
// ...
// For the plugin
mavenRepo "http://repository-[CloudBeesアカウント名].forge.cloudbees.com/release"
}
// ...
plugins {
// ...
compile ":[公開したプラグイン名]:[公開したプラグインバージョン]"
}
}
まとめ
というわけで、こんな感じにCloudBeesを使ってGrailsプラグインを流れるようにpush→Jenkinsビルド→Mavenリポジトリに公開しましょう。
G* Advent Calendar 2012、12日目は@yamkazuさんです。