最近いつくかのプロジェクトがやっていたので
- scalameter
- shapeless
真似してやってみました。
手順としては*1
- travis-ciのコマンドラインクライアントを、gemを使ってインストール
- そのコマンドラインクライアントを使って、sonatypeのuser名とpasswordなどのpublishする際に必要な(だが直接ビルドファイルには書けない)情報を、SONATYPE_USER、SONATYPE_PASSというkey(keyの名前は任意)に暗号化する
- その暗号化したkeyを.travis.ymlに設定。*2また、環境変数からそれらを読み込んでCredentialsを設定する以下の様なコードをbuild.sbtもしくはbuild.scalaに書く
val userPass = for { user <- sys.env.get("SONATYPE_USER") pass <- sys.env.get("SONATYPE_PASS") } yield (user, pass) credentials ++= userPass.map{ case (user, pass) => Credentials("Sonatype Nexus Repository Manager", "oss.sonatype.org", user, pass) :: Nil }.getOrElse(Nil)
https://github.com/xuwei-k/iarray/commit/f7e4e570e24e1
という流れです。
以下参考URL
- http://docs.travis-ci.com/user/encryption-keys/
- http://qiita.com/arukoh@github/items/0315e6b2c1ac046ab34f
これで、githubにpushする度に、自動で毎回snapshotのjarがsonatypeにpublishされるようになります。
セキュリティ的に大丈夫なのかな(pull reqのときとか)と思って、ちょっと試してみた限りは大丈夫でした。
*3
ただあまりない状況でしょうが、コミット権がある人が、よくわからないミスするか、githubの権限奪われたりして、
println(sys.env.get("SONATYPE_PASS"))
というコードをpushされてしてしまったら、自分のsonatypeのパスワード漏れだすことにはなりますね。
その他、セキュリティ的にtravis-ciを信用出来ないという人はやらないほうがいいでしょうが、そのあたりは自分で判断してください