2012年12月11日火曜日

GrailsのプラグインをCloudBeesで公開する

どうも、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

手順

  1. Grailsプラグインを作る
  2. CloudBeesにアカウントを作る
  3. releaseプラグインをCloudBees用に設定する
  4. 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さんです。

0 件のコメント:

コメントを投稿