This document discusses continuous deployment of Rails applications on AWS OpsWorks. It begins with introductions and then covers:
- Using SCRUM methodology for development
- Git workflow with feature branches and pull requests
- Tools for monitoring gems (Gemnasium) and code quality (CodeClimate, Travis CI)
- An overview of AWS OpsWorks including stacks, layers, apps, and using Chef for automation
- How OpsWorks deployments work by pulling from GitHub and running deployment hooks
- Other AWS services that can be used like RDS, ElastiCache, S3
- Logging to external services like Loggly
- Approaches for running background jobs like Sidekiq
-
1 of 20
Downloaded 11 times
More Related Content
Continuous deployment of Rails apps on AWS OpsWorks
7. Travis CI
.travis.yml - Instructions how
to build a testing instance,
how to run tests, matrices,…
HipChat webhook
Email web hook
Deploys to staging env.
pings CodeClimate
A bit expensive
9. How it compares to Heroku
A bit more work to get started
more moving parts you’re responsible for
similar pricing
Much more control (with great power comes great responsibility, Peter)
More complex CLI
Same integration with other services
Documentation is overly complex, lacking examples
Having all services under the same roof can be good or bad
Doesn’t enforce 12 factors, but not hard to follow them on your own
Primary elements:
14. Deployments (how they
work)
A set of instructions to be ran on CLI or Webhook call
All application instances pull application from GitHub
Chef takes over to call deployment hooks (even custom
ones)
Unicorn forks without downtime
If any step of the deployment goes wrong, the old app keeps
being served (again, no downtime!)
deploy/before_restart.rb & co.
15. Other AWS tools
Amazon RDS
ElastiCache
Route 53
Virtual Cloud
Elastic IPs
Elastic Load Balancers (with
health checking)
S3
16. Text
Logging
Need to use external service such as Loggly, Papertrail, so
logs need to go into Syslog (not 100% mandatory, but
easier)
17. Async
Many possibilities to solve
this
OpsWorks doesn’t have a
dedicated Worker layer
Possibility: Custom Chef
recipe
Solution: Rake tasks +
deployment hook
bundle exec rake sidekiq:start
18. Configuration
Can be tricky, many
possible approaches
Hook into Stack JSON
and create a YML file on
deployment, via
deployment hook
(tutorial: http://zaman.io)
19. Recap
merge into staging triggers Travis and Gemnasium
Travis runs tests, reports green or red
Travis reports to HipChat, CodeClimate
Manually run deployment rake task which initiates deployment via CLI
OpsWorks pulls latest master on servers in the layer that app is being
deployed to
If no errors, Unicorn forks itself and runs rake tasks that restart async
(Sidekiq) workers
Everything visible on Papertrail