Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Poll: What do you use for deploying code?
29 points by gosuri on June 12, 2013 | hide | past | favorite | 60 comments
I'm researching for a blog post on various deployment tools and would love your input
Git
131 points
Other
69 points
Capistrano
53 points
Fabric
26 points
Chef
21 points
Puppet
14 points
EC2 BeanStalk
2 points


Two projects I have been following that I like are Salt and Ansible.

http://saltstack.com/community.html

http://www.ansibleworks.com/


We're using Ansible, and so far I've really been liking it. Super simple to set up, and the syntax is extremely easy to write and follow.


I've actually spent the last 14 hours learning to deploy to ec2 using rubber. It's definitely powerful, and the railscast helps, but I haven't found much in the way of help for doing anything beyond deploying basic apps (for example, working on setting up resque workers right now...)

Before 2 days ago I used Heroku for everything.

PS. Rails.


I use capistrano for deployment, I mainly like it because I can set up a VPS on any service and have it clone the repo from git, config is almost identical between applications depending on the complexities of each and it can be heavily modified for the clients needs as well.

Definitely worth a look


I'll nominate fabric.

http://fabfile.org/


I have been using http://beanstalkapp.com/ to do automated deployments. Basically it is Github + some nicer deployment features and a corporate repo focus. (Private by default, easy to add / remove / manage account access when adding or removing employees.)

I have experimented with EC2 Beanstalk and AWS OpsWorks. Both are horrible, and I do not recommend them. The documentation is incredibly obscure, with gaping holes for even basic use cases and I found the deployments themselves to be slow to complete, and unreliable, frequently having issues that were extremely hard to diagnose because of hard to access logs and cryptic error messages.

Git is by far the best deployment system in my opinion, especially if you can automate the code to get each server instance to automatically pull when needed.

But for beginners Beanstalk (http://beanstalkapp.com) is the absolute best. It is dead simple to set up a Git repo on the service, and then Beanstalk's servers will automatically deploy via SFTP to servers (or even directly to Amazon S3 for static content, even invalidating CloudFront caches), and you instantly have a secure deployment mechanism out of the box with no fiddling required.

With Node.js code if you are running your server through Forever you can easily configure it to watch the code directory for changes and restart the server when needed. End to end setup is extremely quick, and it is incredibly reliable.


I don't agree that git is best for deployment and that beanstalk is focused on beginners - git deployment actually for beginners and beanstalk becomes much more handy when you have more than 1 server and 1 developer. Also, not in all languages "git pull" is enough, sometimes you need to run custom commands after that to run external (to git) tools.


Github is pretty key for getting my code in front of the largest amount of users - and their private repo's keep the code that makes it to the app store versioned and accessed between all of my different workstations. Not coming from a CS background, I love their product - so naturally I've moved my own coding habits to using git for personal projects.

Unfortunately at work we're still on svn...


Do you mean source control or deployment? Wondering how you use GitHub and SVN for deployment.


I guess I meant that GitHub totally changed my creative and coding process to using git and being comfortable with its tooling. I'm fooling around with basic Heroku/RoR stuff now, so that's what I'm mainly using git for deployment purposes.

If it helps, I'm an iOS developer, so git isn't realy an option for deployment.

Edit: I guess if I put a different perspective on it, I deploy my open source tools through GitHub and a good commit system. GitHub is pivotal for getting those tools in front of the largest amount of programmers as possible.


Mostly Cap and Git, but Ansible (http://www.ansibleworks.com/) caught my eye recently for experimentation. Looks very promising.


Currently Chef. It's great for getting a machine in order, but it's proven to be a real bear for actually managing deployment of server processes.

We're working on a deployment manager based on Substack's fleet.

https://github.com/substack/fleet https://github.com/PinionTech/rear-admiral


Fleet looks very interesting! Thank you.


1. Atlassian Bamboo for polling my git repository for changes

2. Apache ANT for the build script

3. Then back out to a production/tarball git repo

4. Every load balanced server image has a cron job to poll the production git for changes

This way all I( or my team members) have to do is push to git.

Everything else is automated. All servers load balancing will keep themselves up to date.


That's quite nice, but your weakness is that a single-point of failure can delay your deployment, without you noticing it early enough. Or do you have solution for that?


We stage all changes on a 'develop' branch and run the same exact build process(thanks to bamboo) and deploy to the staging server.

If QA passes, then we just merge the changes to master, push and deploy to production servers.

Bamboo has a nice variety of test suites you can run too.

I really like that git(via bitbucket) and bamboo notify hipchat of any build failures/updates so we can respond immediately if something serious actually goes wrong.


Infrastructure changes:

1. Stash pushes git change notification to bamboo 2. Bamboo checkout git and run cucumber tests on ec2 3. Green tests means puppet changes are pushed to puppet master under staging env 4. Manual build step to push to prod env 5. All affected infra will pickup puppet changes on next run


If I'm just showing off work to clients and pushing things to a staging/dev server, a lot of the time I'll use grunt-rsync or grunt-sftp to push everything up at the end of my `$ grunt produce` task. For site deployments, I prefer Capistrano since it's dead simple.


Chef + Caterer (https://github.com/tylerflint/caterer)

Chef - because it's so easy to write cookbooks

Caterer - because the push model is clean, and it has a similar workflow to Vagrant.


Has anybody looked into using torrents with git? I've heard a few larger companies use it for fast code deployments across 100's/1000's of servers. I'd be interested in more information on how they do this.


I don't think it's based on git, but twitter has their own bittorrent-based solution called Murder.

https://github.com/lg/murder


wow, that sounds murder awesome. here's a video: http://vimeo.com/11280885


Just came across dokku this week https://github.com/progrium/dokku

Couldn't give it a try yet, but seems rather interesting


I just started using EC2 BeanStalk. It's been surprisingly painful...the system makes sense, but some of the config details are obscure...(using Rails 3.2 and mysql)

Shouldn't Heroku be on this?


I think Heroku counts as "git"


Thank you, was thinking about checking it out. Could you explain why you went with BeanStalk?


Server ops isn't my thing...and while I've set up EC2 machines before for specific apps and services, I'm trying to build a workflow for deploying as flexibly as I could with Heroku. I looked at Rubber for a brief moment and it felt like too much...so I gave Beanstalk a try.

Beanstalk has components that I can figure out on my own and the command line tools are easy enough...I'm currently stuck on figuring out when the hell it decides to set the DB user and password, despite what I've explicitly set it...so I know what's going wrong, but the whole settings part is much more annoying than it was on Heroku (even without trying to do anything too complicated). But EC2 has the full suite of services I need so I'll stick with it for now. I expect that once I'm comfortable with BeanStalk, it won't be hard to just migrate to old fashioned EC2 and capistrano.

BeanStalk's support for Rails is relatively recent so the lack of questions on StackOverflow is probably why I'm struggling


Is anyone using Octopus for .NET stack deployment? http://octopusdeploy.com/



I know it's 2013 and the state of the art has changed (as have trends) but I'm kinda weirded out to not see CVS or SVN on here.


That's a version control system. OP is talking about a deployment system. Difference is that the deployment system does something with your final code (from your your git/svn/hg/cvs/mnt etc.).

Please read http://en.wikipedia.org/wiki/Software_deployment


1. Build the debian package 2. Add to private repository 3. Trigger apt-get upgrade on all the servers via any tool or method of choice.


That's what a deployment system is for. It should do 1, 2 and optionally even 3 for you. You should probably look into "landscape" a canonical project.


Fabric is pretty great - but every time I read about chef I wish I had the time and energy to sit down and learn ruby so I could use it.


also - can anyone comment on what is the closet thing to chef written in the best language every, python :)


SaltStack (http://saltstack.com/community.html) and Ansible (http://ansible.cc) would be your two closest options. Of the two, I prefer Ansible for its simplicity and the fact that it can be extended in any language, but it's worth noting that that simplicity currently comes at a cost of power compared to Chef. (E.g., Chef has a concept of "ensure this service is present," and that works on all supported operating systems, whereas Ansible has different modules for different supervisors.)



Can someone explain how Chef works for Rails deployment? Does it replace Capistrano entirely? Suggested tutorials for getting started?


Fabric FTW


Jenkins + Powershell in our Microsoft stack.


Would love more info on this setup.... looking to do the same in our shop


hand-written powershell or using a library?


My preferred approach is to bundle the code into an apt package (or packages) and then use fabric.


can you give more info on how you do this ?



thanks


i use a git post-receive hook that calls a bash script and supervisor for small projects


Fabric to bootstrap new Salt minions, and Salt for the actual deployment.


what is the best tool for java web applications that are built as a war file deployed on tomcat?


Call this a vote for Ansible.


SVN Commit / SVN Update


Salt


rsync


really? that's bad ass if this isnt a joke!


SCP, and human monitoring.


sounds expensive


We don't deploy every 2 secs, and botching something because you tried to automate it too much costs a lot more than a few minutes of my time.


Capistrano


fabric


fossil scm




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: