やりたいこと
- Android用のライブラリをMavenの形式でホストしたい
- ホストにはs3を利用する
- CircleCIでCIを回しmasterへのpushをトリガーにs3へのアップロードも自動化したい
Android LibraryプロジェクトをMaven形式へ変換
Android LibraryプロジェクトをMaven形式に変換するには、mavenプラグインを利用する。
apply plugin: 'maven'
uploadArchives {
repositories {
mavenDeployer {
repository url: "保存先のパス"
pom.version = '0.0.1' // ライブラリバージョン
pom.groupId = 'com.example' // グループ名
pom.artifactId = 'test' // アーティファクト名
}
}
}
build.gradleにuploadArchivesとして定義しておくと、tasksにuploadArchivesが追加されるのでコマンドラインから実行可能になる。
$ ./gradlew uploadArchives
上記のようにコマンドを実行するとMaven形式で指定したパスに保存される。
s3へのアップロード
s3にアップロードする場合には、repository urlにs3:で始まるパスを指定する。
apply plugin: 'maven'
configurations {
deployerJars
}
dependencies {
deployerJars 'org.springframework.build.aws:org.springframework.build.aws.maven:5.0.0.RELEASE'
}
uploadArchives {
repositories {
mavenDeployer {
configuration = configurations.deployerJars
repository(url: "s3:/${s3のbacket}") {
authentication(userName: s3Key, passphrase: s3Secret)
}
pom.version = '0.0.1' // ライブラリバージョン
pom.groupId = 'com.example' // グループ名
pom.artifactId = 'test' // アーティファクト名
}
}
}
configurationには、repository urlに指定するパスのプロトコルごとに異なるライブラリを指定する。例えばsshならorg.apache.maven.wagon:wagon-ssh:2.2が必要になる。参考
s3の場合には、springframeworkのaws-mavenを利用する。s3に認証には、authenticationを記述して行い、key、secretは環境変数にするか外部ファイルに記述するなどする。
circle.yml
s3にアップロードする流れは以下の通り。
- ./gradlew assebleRelease
- ./gradlew uploadArchives
これらのコマンドをCircleCIのdeploymentフローで実行すれば自動でs3にアップロードされるはず。
追記
mavenプラグインを使う方法だとACLを設定する方法が見つからないのでもう一度考え直してみる。別のプラグインを使えば出来そうだけど複雑になりそうなのでできれば使いたくない。Maven形式に変換する部分までをmavenプラグインで行い、s3へのアップロードは別途行った方が良さそう。
参考
- http://u1aryz.blogspot.jp/2013/06/githubmavenandroidaar.html
- http://rejasupotaro.github.io/2013/10/31/10.html
- https://github.com/spring-projects/aws-maven
- http://gradle.monochromeroad.com/docs/userguide/tutorial_this_and_that.html
- http://forums.gradle.org/gradle/topics/publish_to_amazon_s3
- http://wadahiro.hatenablog.com/entry/2012/07/24/234727