grunt-deliver
Version:
Grunt continuous delivery task
195 lines (144 loc) • 4.65 kB
Markdown
# grunt-deliver v0.0.1-alpha
> Deliver codebase to remote server.
## Getting Started
This plugin requires Grunt `>=0.4.0`
If you haven't used [Grunt](http://gruntjs.com/) before, be sure to check out the [Getting Started](http://gruntjs.com/getting-started) guide, as it explains how to create a [Gruntfile](http://gruntjs.com/sample-gruntfile) as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:
```shell
npm install grunt-deliver --save-dev
```
Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:
```js
grunt.loadNpmTasks('grunt-deliver');
```
## Deliver task
_Run this task with the `grunt deliver` command._
Task targets, files and options may be specified according to the grunt [Configuring tasks](http://gruntjs.com/configuring-tasks) guide.
### Options
#### driver
Type: `String`
Default: `lftp`
Values: `lftp`, `rsync` (yet not supported)
Declare protocol used for data transfer.
#### patterns
Type: `Array`
Values: `bower`, `composer`, `dev-node`, `git`, `github`, `ide`, `laravel`, `npm`, `phpunit`, `sass`
Identify project nature. Each pattern include some deploy ignore definitions.
#### auth
Type: `String`
#### src
Type: `String`
#### target
Type: `String`
#### backup
Type: `Object`
- enabled: true,
- stamp: 'yyyymmddHHMMss',
- keep: 4
#### cache
Type: `Array`
#### connection_limit
Type: `Integer`
#### parallel_count
Type: `Integer`
#### notify
Type: `Array`
#### messages
Type: `Object`
### Example
#### Basic stage/production configuration
```js
grunt.initConfig({
deliver: {
options: {
// Protocol driver: lftp
driver: 'lftp',
// Project patterns: bower, composer, dev-node, git, github, ide, laravel, npm, phpunit, sass
patterns: ['git', 'github', 'sass', 'bower', 'npm', 'dev-node', 'laravel'],
// Authorisation key
auth: 'main',
// Default source path
src: 'dist',
// Default target path
target: '/beta',
// Default backup option
backup: {
enabled: false,
stamp: 'yyyymmddHHMMss',
keep: 4
},
// Project cache
cache: ['tmp', 'app/storage/cache', 'app/storage/views', 'app/storage/twig'],
// Connection settings
upload: {
connections: 10,
parallel: 2
},
download: {
connections: 20,
parallel: 5
},
// Notification tasks
notify: ['slack', 'hipchat'],
// Message templates
messages: {
success: 'Delivery to "{target}" finished.',
fail: 'Delivery to "{target}" failed.'
}
},
// Example of stage target
stage: {
name: 'Stage',
branch: 'develop',
auth: 'stage',
src: 'dev',
target: '/beta'
},
// Example of production target
production: {
name: 'Production',
branch: 'master',
src: 'dist',
target: '/www',
backup: true
}
}
});
```
## Ignore file
You can define which files or folders needs to be excluded in `.deliver-ignore` file.
Wildchars are supported. For folders use `/` suffix.
### .deliver-ignore example:
```
.git/
node_modules/
temp/
.deliver-secret.yml
.gitignore
```
## Secrets
Secret data are stored in `.deliver-secret.yml` file for local development only.
If you do put this filename to `.gitignore`!
### .deliver-secret.yml example:
```yml
stage:
host: [HOSTNAME]
user: [USERNAME]
password: [PASSWORD]
production:
host: [HOSTNAME]
user: [USERNAME]
password: [PASSWORD]
```
### Environment variables
For building with your production runners like Jenkins, etc. use environment variables
and consider to keep passwords encrypted.
Task checks variables in this name format:
`DELIVER_[TASK_TARGET]_(HOST|USER|PASSWORD)`;
#### Jenkins [EnvInject plugin](https://wiki.jenkins-ci.org/display/JENKINS/EnvInject+Plugin) example:
```ini
DELIVER_STAGE_HOST=yourhost.com
DELIVER_STAGE_USER=username
```
Store passwords in "password values" section.
## Release history