Capistrano::Dockerbuild

Capistrano tasks for docker build on remote server.

These tasks depends on Git. And so remote server must have git command.

Installation

Add this line to your application's Gemfile:

gem 'capistrano-dockerbuild'

And then execute:

$ bundle

Or install it yourself as:

$ gem install capistrano-dockerbuild

Usage

Add require and install_plugin to Capfile.

require 'capistrano/dockerbuild'
install_plugin Capistrano::Dockerbuild

Variables

Common Variables

Use common variables

  • repo_url
  • branch
name required default desc
docker_build_server_host yes nil Build server hostname or SSH::Host object
docker_build_base_dir yes nil Repository clone to here, and execute build command here
docker_registry no nil Docker registry hostname. if use DockerHub, keep nil
docker_build_cmd no -> { [:docker, "build", "-t", fetch(:docker_tag_full), "."] } Execute command for image building
docker_repository_name no -> { fetch(:application) } Use by docker tag {{docker_repository_name}}:tag
docker_tag no -> { fetch(:branch) } Use by docker tag repository:{{docker_tag}}
docker_tag_full no -> { #{fetch(:docker_repository_name)}:#{fetch(:docker_tag)}" } Use by docker tag {{docker_tag_full}}
docker_remote_repository_name no -> { fetch(:docker_repository_name) } Use by docker push docker_registry/{{docker_remote_repository_name}}:docker_remote_tag
docker_remote_tag no -> { fetch(:docker_tag) } Use by docker push docker_registry/docker_remote_repository_name:{{docker_remote_tag}}
docker_remote_tag_full no -> { "#{fetch(:docker_registry) &.+ "/"}#{fetch(:docker_remote_repository_name)}:#{fetch(:docker_remote_tag)}" } Use by docker push {{docker_remote_tag_full}}
keep_docker_image_count no 10

Tasks

docker:check

  • Ensure #{docker_build_base_dir}
  • Ensure git reachable

docker:clone

  • Clone repo to #{docker_build_base_dir} as mirror

docker:update_mirror

  • git remote update #{docker_build_base_dir}

docker:build

  • Create #{branch} worktree to #{docker_tag}-#{timestamp}
  • With in worktree dir, execute #{docker_build_cmd}
  • Clear worktree

docker:push

  • docker tag #{docker_tag_full} #{docker_remote_tag_full}
  • docker push #{docker_remote_tag_full}

docker:cleanup_local_images

  • Remove docker images
  • Leave keep_docker_image_count images
  • Remove from the oldest image

Task Dependency

docker:push => docker:build => docker:update_mirror => docker:clone => docker:check

Development

After checking out the repo, run bin/setup to install dependencies. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/reproio/capistrano-dockerbuild.

License

The gem is available as open source under the terms of the MIT License.