Gulp plugin for deploying a set of files directly into an Amazon Elasticbeanstlak Instance
var gulp = require('gulp')
, gulpEbDeploy = require('gulp-elasticbeanstalk-deploy')
gulp.task('deploy', function() {
return gulp.src([
'config/**/*',
'lib/**/*',
'docs/**/*.html',
'package.json'
], {
base: './',
nodir: true // Set this if you have problems when unzipping
})
.pipe(gulpEbDeploy({
name: 'my-application', // optional: If not set, the name from package.json will be used
version: '1.0.0', // optional: If not set, the version from package.json will be used
timestamp: true, // optional: If set to false, the zip will not have a timestamp
waitForDeploy: true, // optional: if set to false the task will end as soon as it starts deploying
amazon: {
credentials: {
accessKeyId: "< your access key (fyi, the 'short' one) >", // optional
secretAccessKey: "< your secret access key (fyi, the 'long' one) >", // optional
}
config: { // optional
signatureVersion: "v4",
}
region: 'eu-west-1',
bucket: 'elasticbeanstalk-apps',
applicationName: 'MyApplication',
environmentName: 'my-application-env'
}
}))
})
The code above would work as follows
- Take the files sepcified by
gulp.src
and zip them on a file named{ version }-{ timestamp }.zip
(i.e:1.0.0-2016.04.08_13.26.32.zip
) - There are multiple ways to provide AWS credentials:
- as an AWS.Credentials object or an object of any inheriting class
- as an object holding parameters to AWS.Credentials or any of the following inheriting classes: AWS.CognitoIdentityCredentials, AWS.SharedIniFileCredentials, AWS.SAMLCredentials, AWS.TemporaryCredentials, which gulp-elasticbeanstalk-deploy will then try to autodetect.
- as a string either holding the path to AWS.FileSystemCredentials or the prefix for AWS.EnvironmentCredentials.
- If no credentials are provided, the default values from AWS CLI configuration will be used.
- Try to upload the zipped file to the bucket specified by
amazon.bucket
. If it fails because the bucket doesn't exist, try to create the bucket and then try to upload the zipped file again - Uploads the ziped files to the bucket on the path
{{ name }}/{{ filename }}
(i.e:my-application/1.0.0-2016.04.08_13.26.32.zip
) - Creates a new version on the Application specified by
applicationName
with VersionLabel{ version }-{ timestamp }
(i.e:1.0.0-2016.04.08_13.26.32
) - Updates the Environment specified by
environmentName
by settings its application version to the new just uploaded - Waits for completion of the deploy process on the environment, informing on status changes