packagecloud.ioとBundlerをつかって、任意バージョンのRubygemを依存ごと手軽にホスティングしてみましょう。
リポジトリを作成する
まずサインアップしたら、次に適当な名前でリポジトリを作成します。
フリープランだとパッケージ数の上限蛾は25です。
できました、rpm,deb,Rubygemに対応しています。
CLIを導入する
package_cloudのCLIはRubygemです。インストールしましょう。
$ gem install package_cloud
...
Successfully installed package_cloud-0.2.11
7 gems installed
package_cloud repository list
を実行すると、初回のみ認証情報の入力を求められ、トークンを作成してファイルに保存します。楽ですね。
$ package_cloud repository list
No config file exists at /Users/user1/.packagecloud. Login to create one.
Email:
user1@example.com
Password:
Got your token. Writing a config file to /Users/user1/.packagecloud... success!
トークン作成後は、先程作成したリポジトリがリストで確認できます。
$ package_cloud repository list
Your repositories:
sawanoboly/long_live_serverspec_v1 (public)
last push: never | packages: no packages
これでCLIの準備はOKです。
Bundlerで任意バージョンのRubyGemを依存を含めて収集する
ではアップロードするパッケージ(Gems)を収集しましょう。
bundle init
してGemfileを作成します。
サンプルとしてServerspecを1.x系で固めることにします。
# A sample Gemfile
source "https://rubygems.org"
gem "serverspec", '< 2.0'
bundle package
コマンドで./vendor/bundle
ディレクトリにGemsが保存されていきます。
$ bundle package
Fetching gem metadata from https://rubygems.org/.....
Installing diff-lcs 1.2.5
Installing net-ssh 2.9.1
Installing highline 1.6.21
Installing rspec-mocks 2.99.2
Using bundler 1.7.3
Installing specinfra 1.27.5
Installing rspec-core 2.99.2
Installing rspec-expectations 2.99.2
Installing rspec 2.99.0
Installing rspec-its 1.0.1
Installing serverspec 1.16.0
Your bundle is complete!
It was installed into ./vendor/bundle
Updating files in vendor/cache
* diff-lcs-1.2.5.gem
* highline-1.6.21.gem
* net-ssh-2.9.1.gem
* rspec-core-2.99.2.gem
* rspec-expectations-2.99.2.gem
* rspec-mocks-2.99.2.gem
* rspec-2.99.0.gem
* rspec-its-1.0.1.gem
* specinfra-1.27.5.gem
* serverspec-1.16.0.gem
$ ls vendor/cache/
diff-lcs-1.2.5.gem net-ssh-2.9.1.gem rspec-core-2.99.2.gem rspec-its-1.0.1.gem serverspec-1.16.0.gem
highline-1.6.21.gem rspec-2.99.0.gem rspec-expectations-2.99.2.gem rspec-mocks-2.99.2.gem specinfra-1.27.5.gem
これで収集OK。
Gemsをpackagecloudにアップロードする
CLIのpush
サブコマンドで./vendor/bundle
以下に保存されたGemsをアップロードすることができます。
package_cloud push user/repo[/distro/version] /path/to/packages
こんな感じですね。
$ package_cloud push sawanoboly/long_live_serverspec_v1 vendor/cache/*.gem
Are you sure you want to push 10 packages? (y/n): y
Looking for repository at sawanoboly/long_live_serverspec_v1... success!
Pushing vendor/cache/highline-1.6.21.gem... success!
Pushing vendor/cache/net-ssh-2.9.1.gem... success!
Pushing vendor/cache/rspec-2.99.0.gem... success!
Pushing vendor/cache/rspec-core-2.99.2.gem... success!
Pushing vendor/cache/rspec-expectations-2.99.2.gem... success!
Pushing vendor/cache/rspec-its-1.0.1.gem... success!
Pushing vendor/cache/rspec-mocks-2.99.2.gem... success!
Pushing vendor/cache/serverspec-1.16.0.gem... success!
Pushing vendor/cache/specinfra-1.27.5.gem... success!
Pushing vendor/cache/diff-lcs-1.2.5.gem... success!
WebのUIでも確認出来ました。
installation
の項目を見れば各種導入方法が載っています。
何れのパッケージ形式も、公式のリポジトリ追加手順にのっとっているので使いやすいですね。
インストールテスト
バージョン無指定のGemfile
を作成してみます。
# A sample Gemfile
source 'https://packagecloud.io/sawanoboly/long_live_serverspec_v1/'
gem 'serverspec'
bundle
してみるとsource
で指定したpackagecloud.io
にRubyGemsを取りに行っています。
$ bundle install --path vendor/bundle --binstubs
Fetching source index from https://packagecloud.io/sawanoboly/long_live_serverspec_v1/
Installing diff-lcs 1.2.5
Installing highline 1.6.21
Installing net-ssh 2.9.1
Installing specinfra 1.27.5
Using bundler 1.7.3
Installing rspec-core 2.99.2
Installing rspec-mocks 2.99.2
Installing rspec-expectations 2.99.2
Installing rspec 2.99.0
Installing rspec-its 1.0.1
Installing serverspec 1.16.0
Your bundle is complete!
It was installed into ./vendor/bundle
固定したバージョンのGemsが入りました。
今回サンプルに使用したリポジトリはこちらです。 https://packagecloud.io/sawanoboly/long_live_serverspec_v1