https://github.com/deric/capistrano-parcel
Awesome tool for compiling at multiple machines and your dish washer at the same time! (if your dish washer has ssh access)
https://github.com/deric/capistrano-parcel
Last synced: 12 months ago
JSON representation
Awesome tool for compiling at multiple machines and your dish washer at the same time! (if your dish washer has ssh access)
- Host: GitHub
- URL: https://github.com/deric/capistrano-parcel
- Owner: deric
- License: mit
- Created: 2013-11-27T16:47:50.000Z (over 12 years ago)
- Default Branch: master
- Last Pushed: 2015-03-25T09:25:03.000Z (about 11 years ago)
- Last Synced: 2025-04-04T10:33:34.872Z (about 1 year ago)
- Language: Ruby
- Homepage:
- Size: 520 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# Capistrano::Parcel
Distributed building tool, originally inspired by Python's Parcel, just written in Ruby and with many improvements. Parcel is taking advantage of [Capistrano 3](https://github.com/capistrano/capistrano), [SSHkit](https://github.com/capistrano/sshkit) and [FPM](https://github.com/jordansissel/fpm).
The idea is simple:
* we want to deploy native packages packed with all dependencies
* support multiple releases/distribution
* fast and reliable deployment
* updating N production servers with `git pull` + package dependencies doesn't scale well
* package should be tested before going to production
Project structure looks like this:
```
├── lib
├── config
│ ├── deploy
│ │ ├── build.rb
│ │ ├── production.rb
│ │ └── staging.rb
│ └── deploy.rb
├── Capfile
├── Gemfile
├── Gemfile.lock
```
In `Capfile` we specify which plugins should be used during package making process.
Capfile: (note: we're not using standard Capistrano `deploy` task)
```ruby
# Load DSL and Setup Up Stages
require 'capistrano/setup'
require 'capistrano/parcel'
# build package with fpm
require 'capistrano/parcel/fpm'
```
Basic scenario expects few categories of servers:
* build - for each distribution you can have one
* staging
* production
For each category you can you different settings (ssh keys, user account, etc.)
This will build package on remote server and transfer package back to your machnine (over `scp`)
```
$ cap build parcel
```
### Build process
Each phase is a separate Rake task. You can use `before` and `after` hooks to execute any code before/after.
1. starting
2. updating
3. compiling
4. packaging
5. finishing
### Rsync
Rsync is used for copying files to build server. This way we can easily copy a git repository with submodules.
You can control which files will be packaged with
```ruby
set :rsync_exclude, [ '.git', 'some-other-dir' ]
```
### Plugins
Plugins are usually simple tasks that are executed in several steps during building process. Plugins can't rely on each other, rather use variables, that are accessible with `set(:var)` and for reading `fetch(:var)`.
Each plugin can be enabled in `Capfile`:
```ruby
require 'capistrano/parcel/plugin_name'
```
#### fpm
Used for packaging whole directory as a deb package. Could be used also for RPM or other packages.
#### uwsgi
Simple application server configuration.
Enable with:
```ruby
require 'capistrano/parcel/uwsgi'
```
#### nginx
Currently allows only intialization of nginx scripts.
Enable with:
```ruby
require 'capistrano/parcel/nginx'
```
#### supervisor
(experimental)
#### virtualenv
(experimental)
### Package metadata
Meta information about package is fetched from a `package.yml` file which must be located on local filesystem (in directory where is `cap` command executed).
```yml
version: '0.0.1'
arch: 'all'
license: 'MIT'
category: 'misc'
maintainer: 'john.doe@example.com'
vendor: 'Jon Doe et al.'
description: 'Package description'
url: 'http://example.com'
```
## Installation
requirements:
* some version of Ruby (> 1.8.7 is recommended)
* Bundler (`gem install bundler`)
Create a `Gemfile` with following content:
```ruby
source 'https://rubygems.org'
gem 'capistrano-parcel', github: 'deric/capistrano-parcel'
```
and run `bundle install`