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 before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:
npm install grunt-deliver --save-dev
Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:
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 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
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:
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 example:
DELIVER_STAGE_HOST=yourhost.com
DELIVER_STAGE_USER=username
Store passwords in "password values" section.