continuous integration with fabric
DESCRIPTION
An introduction to Continuous Integration with Fabric. Mainly used to deploy codes in server usually in one line.TRANSCRIPT
Continuous IntegrationWith Fabric
http://docs.fabfile.org
Varun Batra @ Deft Infotech Pvt. Ltd.
I am Lazy!
I need one command to deploy codes.
>fab deploy
That’s what I was talking about
Varun Batra @ Deft Infotech Pvt. Ltd.
What if something goes wrong?
>fab deploy
This command should handle that as well and report me.
Varun Batra @ Deft Infotech Pvt. Ltd.
Common Principle of CI
• Code Repository (I use GIT)
• Fast & Auto Build
• Self Testing
• ‘Test Environment’ is not ‘Build Environment’
• Auto Deployment: merge to master/deploy branch (GIT), this should auto deploy it
• Self Sustainable System, e.g. if db is destroyed, it should automatically recreated by latest backup
Varun Batra @ Deft Infotech Pvt. Ltd.
My Deployment Principle
• Based on my experience
• Based on guys’s ‘better than me’ experience
• Let me know if you can improve because you can
Varun Batra @ Deft Infotech Pvt. Ltd.
Varun Batra @ Deft Infotech Pvt. Ltd.
Why Fabric?I learned it in half day
It can do what I need
Few seconds installation
Varun Batra @ Deft Infotech Pvt. Ltd.
GIT
>git branch something_cool
>git checkout something_cool
>git commit -a -m ‘what I did?’
>git checkout master
>git merge something_cool
>git push
git checkout -b something_cool combines first two commands
Varun Batra @ Deft Infotech Pvt. Ltd.
Fabric: library + command-line tool
Fabric is a Python (2.5 or higher) library and command-line tool for streamlining the use of SSH for application deployment or systems administration tasks.
I copied from their website, I am lazy
Varun Batra @ Deft Infotech Pvt. Ltd.
Fabric Features
• Runs local and remote commands
• Runs normal or sudo commands
• Upload & Download files
• Prompt for input
• Simultaneous deploying in multiple server
• Output in different colors like red(text,bold=False)
Varun Batra @ Deft Infotech Pvt. Ltd.
Fabric combines
fabfile.py fab
Varun Batra @ Deft Infotech Pvt. Ltd.
There is a catch
each run or sudo call has its own distinct shell session.
run('cd foo' && 'mkdir bar')is notrun('cd foo')run('mkdir bar')
iswith('cd foo')
run('mkdir bar')
Varun Batra @ Deft Infotech Pvt. Ltd.
How discussed deployment process should be?
Varun Batra @ Deft Infotech Pvt. Ltd.
Processing Output
Output of ‘run’ command is stored in ‘url’ variable
Varun Batra @ Deft Infotech Pvt. Ltd.
Deploy with options?
• Passing parameters?• fab deploy:env=production
• fab deploy:production (in order of params)
• !Passing True is string i.e. ‘True’ not True
• Deploy to many hosts?• env.hosts = ['[email protected]', ' [email protected] ']
• fab –H [email protected], [email protected] deploy
• Show fewer output?• with hide('output','running'), settings(warn_only=True):
Varun Batra @ Deft Infotech Pvt. Ltd.
@serial VS @parallel
Varun Batra @ Deft Infotech Pvt. Ltd.
More decorators?
• @hosts
• @roles
• @runs_once !caution with @parallel
• @task
• @with_settings
• @serial
• @parallel
Varun Batra @ Deft Infotech Pvt. Ltd.
Context Managers
Remember ‘with’?
with('cd ~/git_repo/'):
run('git pull')
#cd ~/git_repo/ && git pull
with hide('running', 'stdout', 'stderr'):
do_something()
Varun Batra @ Deft Infotech Pvt. Ltd.
Context Manager cont’d..
• cd
• with
• lcd
• path
• prefix
• settings
• show
Varun Batra @ Deft Infotech Pvt. Ltd.
Contributions
• File/directory management• comment/uncomment, sed, append, contains, exists, upload_template, first
• Project Tools• rsync_project, upload_project
• Django integration
Varun Batra @ Deft Infotech Pvt. Ltd.
Lets look at fabfile.py
Varun Batra @ Deft Infotech Pvt. Ltd.
But wait..What about auto-
deployment?cron VS service
Varun Batra @ Deft Infotech Pvt. Ltd.
fab prompt_for_any_questions
Varun Batra
IT Consultant
Deft Infotech Pvt. Ltd.
skype:varunb.deftinfotech
http://varunbatra.com
https://www.linkedin.com/in/varunbatra/
https://www.facebook.com/VarunBatraIT
https://twitter.com/batravarun
fab stay_in_touch
Varun Batra @ Deft Infotech Pvt. Ltd.