23
Continuous Integration With Fabric http://docs.fabfile.org Varun Batra @ Deft Infotech Pvt. Ltd.

Continuous Integration with Fabric

Embed Size (px)

DESCRIPTION

An introduction to Continuous Integration with Fabric. Mainly used to deploy codes in server usually in one line.

Citation preview

Page 1: Continuous Integration with Fabric

Continuous IntegrationWith Fabric

http://docs.fabfile.org

Varun Batra @ Deft Infotech Pvt. Ltd.

Page 2: Continuous Integration with Fabric

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.

Page 3: Continuous Integration with Fabric

What if something goes wrong?

>fab deploy

This command should handle that as well and report me.

Varun Batra @ Deft Infotech Pvt. Ltd.

Page 4: Continuous Integration with Fabric

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.

Page 5: Continuous Integration with Fabric

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.

Page 6: Continuous Integration with Fabric

Varun Batra @ Deft Infotech Pvt. Ltd.

Page 7: Continuous Integration with Fabric

Why Fabric?I learned it in half day

It can do what I need

Few seconds installation

Varun Batra @ Deft Infotech Pvt. Ltd.

Page 8: Continuous Integration with Fabric

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.

Page 9: Continuous Integration with Fabric

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.

Page 10: Continuous Integration with Fabric

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.

Page 11: Continuous Integration with Fabric

Fabric combines

fabfile.py fab

Varun Batra @ Deft Infotech Pvt. Ltd.

Page 12: Continuous Integration with Fabric

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.

Page 13: Continuous Integration with Fabric

How discussed deployment process should be?

Varun Batra @ Deft Infotech Pvt. Ltd.

Page 14: Continuous Integration with Fabric

Processing Output

Output of ‘run’ command is stored in ‘url’ variable

Varun Batra @ Deft Infotech Pvt. Ltd.

Page 15: Continuous Integration with Fabric

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.

Page 16: Continuous Integration with Fabric

@serial VS @parallel

Varun Batra @ Deft Infotech Pvt. Ltd.

Page 17: Continuous Integration with Fabric

More decorators?

• @hosts

• @roles

• @runs_once !caution with @parallel

• @task

• @with_settings

• @serial

• @parallel

Varun Batra @ Deft Infotech Pvt. Ltd.

Page 18: Continuous Integration with Fabric

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.

Page 19: Continuous Integration with Fabric

Context Manager cont’d..

• cd

• with

• lcd

• path

• prefix

• settings

• show

Varun Batra @ Deft Infotech Pvt. Ltd.

Page 20: Continuous Integration with Fabric

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.

Page 21: Continuous Integration with Fabric

Lets look at fabfile.py

Varun Batra @ Deft Infotech Pvt. Ltd.

Page 22: Continuous Integration with Fabric

But wait..What about auto-

deployment?cron VS service

Varun Batra @ Deft Infotech Pvt. Ltd.

Page 23: Continuous Integration with Fabric

fab prompt_for_any_questions

Varun Batra

IT Consultant

Deft Infotech Pvt. Ltd.

skype:varunb.deftinfotech

http://varunbatra.com

[email protected]

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.