Google::Cloud::Gemserver
This gem is a tool that lets you manage, interact with, and deploy a private gem server to a Google Cloud Platform project. The gemserver acts as a private gem repository for your gems similar to how rubygems.org works with the exception that pushing and installing gems are protected operations.
Installation
Add this line to your application's Gemfile:
gem 'google-cloud-gemserver'
And then execute:
$ bundle
Or install it yourself as:
$ gem install google-cloud-gemserver
Usage
Basic Prerequisites
1) Create a Google Cloud Platform (GCP) project. 2) Install and setup the gcloud SDK. Currently, versions 161+ are supported. 3) Authenticate gcloud by using a service account or application default credentials. Using a service account is the recommended method for authentication; application default credentials should only be used for development purporses. Read this authentication guide for more information. 4) Running acceptance or performance tests requires you to have the Cloud SQL proxy running with your Cloud SQL instance. Visit this link to learn how to install and run it (steps 3 and 5 can be skipped).
Typical Workflow
1) Deploy a gemserver by running: google-cloud-gemserver create --use-proj YOUR_PROJECT_ID
. This deploys the gemserver in a Google App Engine project as the default service. It also creates a new Cloud SQL instance with machine type db-f1-micro. Note that this machine type is only recommended for development / testing and is not under the Cloud SQL SLA coverage.
2) Generate a key (referred to as my-key) by running google-cloud-gemserver create-key --use-proj YOUR_PROJECT_ID
for your gemserver. By default, this generates a key with both read and write permissions. For more information about keys, read this.
3) Add this key to your bundle config by running bundle config http://gemserver-url.com/private/ my-key
where gemserver-url is the same as your project's url, e.g. http://my-project.appspot.com/private/. This is necessary to download gems.
4) Add this key to your gem credentials as my-key (in ~/.gem/credentials): :my-key: [KEY]
This is necessary to push gems (if the key has write permission).
5) Push private gems to the gemserver as described below.
6) Download private gems by modifying your Gemfile as described
below.
Pushing gems
Note: ensure my-key
has the read permission and is added in your gem
credentials file (~/.gem/credentials)
gem push my-gem --key my-key --host http://my-gemserver.com/private/
Fetching gems
Note: ensure my-key
has the read permission and is set in your bundle
config by running bundle config http://my-gemserver.com/private/ my-key
1) Add source "http://my-gemserver.com"
to the top of your Gemfile
2) Add the following to your Gemfile:
source "http://my-gemserver.com/private" do
gem "my-private-gem1"
(other private gems here)
end
3) Run bundle install
Yanking gems
Note: ensure my-key
has the write permission and is added in your gem
credentials file (~/.gem/credentials)
gem push my-gem --key my-key --host http://my-gemserver.com/private/
1) Run gem yank --key my-key [GEM_NAME] --host
http://my-gemserver.com/private
Gems can not be "unyanked" so once a gem has been yanked it cannot be pushed to the gemserver again with the same name and version. It can be pushed if the version number is changed, however.
Gemserver commands
google-cloud-gemserver config
Usage: google-cloud-gemserver config
Displays the config the current deployed gemserver is using (if one is running)
google-cloud-gemserver create
Usage: google-cloud-gemserver create
Options:
- -g, [--use-proj=USE_PROJ] # Existing project to deploy gemserver to
- -i, [--use-inst=USE_INST] # Existing project to deploy gemserver to
Creates and deploys the gem server then starts it
google-cloud-gemserver create-key
Usage: google-cloud-gemserver create-key
Options:
- -r, [--remote=REMOTE] # The gemserver URL, i.e. gemserver.com
- -p, [--permissions=PERMISSIONS] # Options: write, read, both. Default is both.
- -g, [--use-proj=USE_PROJ] # The GCP project the gemserver was deployed to.
Creates an authentication key
google-cloud-gemserver delete-key
Usage: google-cloud-gemserver delete-key
Options:
- -r, [--remote=REMOTE] # The gemserver URL, i.e. gemserver.com
- -k, [--key=KEY] # The key to delete
- -g, [--use-proj=USE_PROJ] # The GCP project the gemserver was deployed to.
Deletes a given key
google-cloud-gemserver delete
Usage: google-cloud-gemserver delete
Options:
- -g, [--use-proj=USE_PROJ] # Project id of GCP project the gemserver was deployed to. Warning: parent project and CloudSQL instance will also be deleted
Delete a given gemserver
google-cloud-gemserver start
Usage: google-cloud-gemserver start
Starts the gem server. This will be run automatically after a deploy. Running this locally will start the gemserver locally
google-cloud-gemserver stats
Usage: google-cloud-gemserver stats
Options:
- -r, [--remote=REMOTE] # The gemserver URL, i.e. gemserver.com
- -g, [--use-proj=USE_PROJ] # The GCP project the gemserver was deployed to.
Displays statistics on the given gemserver
google-cloud-gemserver update
Usage: google-cloud-gemserver update
Redeploys the gemserver with the current config file and google-cloud-gemserver gem version (a deploy must have succeeded for 'update' to work)
google-cloud-gemserver gen-config
Usage: google-cloud-gemserver gen-config
Generates configuration files with default values
google-cloud-gemserver help
Usage: google-cloud-gemserver help [COMMAND]
Describe available commands or one specific command
More documentation can be found in the docs directory.
Contributing
Detailed information can be found in CONTRIBUTING.md.