SBTでcloudのartifactoryにScalaのプロジェクトをdeployしてみよう!


サービスを作成しているとどうしても複数のサービスにまたがるようなモジュールができてきてしまいます。

1. サービス形態

そんな時に、NexusやArchiva、Artifactoryがあり、まずは、有償版、無償版という料金の軸とクラウド版、オンプレ版という構築場所の軸があります。

有償版 無償版
クラウド Artifactory Maven, Rubyforge, Cocoapods
オンプレ Nexus, Artifactory Nexus、Artifactory

抜けは結構あるのですが、上記のような感じでしょうか。

2. 金額とセキュリティ

次に、金額やセキュリティ、という軸が出てくると思います。
(先に、ここの議論が出てきて上記のマトリクスが自動的に1択になることもありますが。。)

2-1. 金額

左上の、「有償版 × クラウド」が月々たとえば1万円くらいだとして、どのくらいの規模でシステム開発をしてるのか、とか、モジュールの管理にどのくらいのお金をかけるの?、みたいな話があります。

日々のビルド、デプロイ、リポジトリ管理、そこに加えてライブラリ管理、として、かつ、サービスがどんどん新しく作られたり改善される環境だと0.2くらいの工数がとられちゃうかもしれません。企業にもよりますが、属人化しないようにドキュメント化やトレーニングも考えると、人件費はどの形態を選んでも発生します。

有償版 無償版
クラウド サービス自体の運用はなし サービス自体の運用はなし
オンプレ お金を払って自社内に構築する。サポートはあるけれど運用する必要はあり。基本的に組織単位で使う、という理解 サービス自体の運用はあり。チームごとか組織全体で使うのか、や、運用工数についての議論もある

2-2. セキュリティや公開範囲の問題

作成したソースコード、ライブラリは公開できるんだっけ、という議論があります。
また、セキュリティ管理できるんだっけ?という議論もあります。

有償版 無償版
クラウド プライベートリポジトリ。基本的に安全。 世界公開。世界平和には貢献できますが会社が守りたいようなプロダクトは公開できません。世界平和への貢献と企業価値とのトレードオフになります。
オンプレ 企業のネットワークで利用するのでお金を払うのであればこれが最も安全か? 無償で、かつ、企業のネットワーク内で利用する。とっても安全です。

3. クラウド版のArtifactoryを使ってみた

フリートライアルでも有償版のクラウドのArtifactoryを利用できる、とのことなので利用してみることにしました。
あまり構築・運用をしたくないなー、という強い思いに駆られました。

3-1. Artifactoryでドメイン設定する

下記のページから登録をします。

組織名を入力してサブミットすると、

  • https://${組織名}.artifactoryonline.com/${組織名}/webapp

という形で提供されることになります。

3-2. サンプルをみながら、ビルドを実行してみる

下記のように優しいサンプルのリポジトリがあります。

//github.com/JFrogDev/project-examples/blob/master/sbt-example/build.sbt

lazy val root = (project in file(".")).
  settings(
    name := "SBT_Example",
    version := "1.1-SNAPSHOT",
    scalaVersion := "2.11.4"
  )

  resolvers += "Artifactory" at "http://localhost:8081/artifactory/jcenter"

  publishTo := Some("Artifactory Realm" at "http://localhost:8081/artifactory/libs-snapshot-local")

  credentials += Credentials(new File("credentials.properties"))

  libraryDependencies += "org.apache.derby" % "derby" % "10.4.1.3"

上記の、リリース先のホストを変更し、credentials.propertiesファイルを用意します。

build.sbt
scalacOptions := Seq("-unchecked", "-deprecation", "-encoding", "utf8")


lazy val root = (project in file(".")).
  settings(
    organization := "org.triplew.example",
    name := "akka-tracing-example",
    version := "1.0-SNAPSHOT",
    scalaVersion := "2.11.8"
  )

resolvers += "Artifactory" at "https://${組織名}.artifactoryonline.com/artifactory/jcenter"

publishTo := Some("Artifactory Realm" at "https://${組織名}.artifactoryonline.com/${組織名}/libs-snapshot-local")

credentials += Credentials(new File("credentials.properties"))

libraryDependencies += "org.apache.derby" % "derby" % "10.4.1.3"

と、その後に、

sbt publish

すると、行けました。

感想

お金を払ってもらえるのであれば、これほど便利なものはない。。。
Dockerやnpm等もあるので、これからも使っていきます^^


本日は以上となります。