AWS CodeDeploy
This page documents deployments using dpl v1 which is currently the legacy version. The dpl v2 is released, and we recommend useig it. Please see our blog post for details. dpl v2 documentation can be found here.
Travis CI can automatically trigger a new Deployment on AWS CodeDeploy after a successful build.
For a minimal configuration with S3, add the following to your .travis.yml
:
deploy:
- provider: s3
# rest of S3 deployment for MyApp.zip
# ⋮
- provider: codedeploy
access_key_id: "YOUR AWS ACCESS KEY"
secret_access_key: "YOUR AWS SECRET KEY"
bucket: "S3 Bucket"
key: latest/MyApp.zip
application: MyApp
deployment_group: MyDeploymentGroup
Note that in this example, Travis CI will attempt to deploy to an existing CodeDeploy Application called MyApp in AWS Region us-east-1
.
A complete example can be found here.
You can find your AWS Access Keys here. It is recommended to encrypt that key.
If your CodeDeploy application lives in any region other than us-east-1
please add a region field to .travis.yml
(see AWS-region-to-deploy-to).
Assuming you have the Travis CI command line client installed, you can do it like this:
travis encrypt --add deploy.secret_access_key
You will be prompted to enter your api key on the command line.
You can also have the travis
tool set up everything for you:
travis setup codedeploy
Keep in mind that the above command has to run in your project directory, so it can modify the .travis.yml
for you.
This command will also offer to set up S3 deployment, if you want to bundle to be uploaded from the Travis CI build.
Deployment Branch #
You can explicitly specify the branch to deploy from with the on option:
deploy:
provider: codedeploy
access_key_id: "YOUR AWS ACCESS KEY"
secret_access_key: "YOUR AWS SECRET KEY"
bucket: "S3 Bucket"
key: latest/MyApp.zip
bundle_type: zip
application: MyApp
deployment_group: MyDeploymentGroup
on:
branch: production
Alternatively, you can also configure Travis CI to deploy from all branches:
deploy:
provider: codedeploy
access_key_id: "YOUR AWS ACCESS KEY"
secret_access_key: "YOUR AWS SECRET KEY"
bucket: "S3 Bucket"
key: latest/MyApp.zip
bundle_type: zip
application: MyApp
deployment_group: MyDeploymentGroup
on:
all_branches: true
Builds triggered from Pull Requests will never trigger a release.
S3 or GitHub Deployment #
For a minimal configuration with GitHub, add the following to your .travis.yml
:
deploy:
- provider: codedeploy
revision_type: github
access_key_id: "YOUR AWS ACCESS KEY"
secret_access_key: "YOUR AWS SECRET KEY"
application: "Your Codedeploy application"
deployment_group: "The Deployment group associated with the codedeploy application"
region: "Region in which your ec2 instance is."
Please note that region
should match the instance region on which codedeploy is configured.
Also note that GitHub deployments target a specific commit, and any unversioned files will not be deployed. If you need to add unversioned files to your deployment, use an S3 deployment instead.
Waiting for Deployments #
By default, the build will continue immediately after triggering a CodeDeploy deploy. To wait for the deploy to complete, use the wait_until_deployed option:
deploy:
provider: codedeploy
wait_until_deployed: true
# ⋮
Travis CI will wait for the deploy to complete, and log whether it succeeded.
Bundle Types #
The bundleType of your application is inferred from the file extension of key
or s3_key
set in your .travis.yml
.
If your .travis.yml
contains both, and they do not match, set bundle_type
explicitly to the correct value.
Conditional deployments #
You can deploy only when certain conditions are met.
See Conditional Releases with on:
.
The .gitignore method #
As this deployment strategy relies on git
, be mindful that the deployment will
honor .gitignore
.
If your .gitignore
file matches something that your build creates, use
before_deploy
to change
its content.
Run Commands Before or After Deploy #
Sometimes, you want to run commands before or after deploying. You can use the before_deploy
and after_deploy
stages for this. These will only be triggered if Travis CI is actually deploying.
before_deploy: "echo 'ready?'"
deploy:
# ⋮
after_deploy:
- ./after_deploy_1.sh
- ./after_deploy_2.sh
Specify an AWS region #
You can explicitly specify the AWS region to deploy to with the region option:
deploy:
provider: codedeploy
access_key_id: "YOUR AWS ACCESS KEY"
secret_access_key: "YOUR AWS SECRET KEY"
bucket: "S3 Bucket"
key: latest/MyApp.zip
bundle_type: zip
application: MyApp
deployment_group: MyDeploymentGroup
region: us-west-1