Fabric-让部署变得简单
Upcoming SlideShare
Loading in...5
×
 

Fabric-让部署变得简单

on

  • 3,030 views

 

Statistics

Views

Total Views
3,030
Views on SlideShare
2,719
Embed Views
311

Actions

Likes
10
Downloads
66
Comments
0

3 Embeds 311

http://blog.lxneng.com 176
http://lxneng.com 133
http://127.0.0.1 2

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Fabric-让部署变得简单 Fabric-让部署变得简单 Presentation Transcript

  • Fabric Lo (Eric Lo) http://lxneng.com lxneng@gmail.com twitter: @lxneng Sunday, August 29, 2010
  • About Fabric is a Python library and command- line tool for streamlining the use of SSH for application deployment or systems administration tasks capistrano in python 单 学 经 统 Sunday, August 29, 2010
  • Fabric is two things Api for streamlining the use of ssh for app development or system management tasks Command-line interface for calling python methods Sunday, August 29, 2010
  • Install sudo easy_install fabric Sunday, August 29, 2010
  • Example vim fabfile.py #!/usr/bin/env python from fabric.api import env, run env.hosts = ['xxx.com'] env.user = 'eric' def du(): run("du -sh /home/eric") Erics-MacBook:~ eric$ fab du [xxx.com] run: du -sh /home/eric [xxx.com] out: 942M /home/eric Done. Disconnecting from xxx.com... done. Sunday, August 29, 2010
  • Deploy my rails app Erics-MacBook:~ eric$ cd NetBeans_Workspace/lxneng Erics-MacBook:lxneng eric$ touch fabfile.py Erics-MacBook:lxneng eric$ vim fabfile.py #!/usr/bin/env python # encoding: utf-8 from fabric.api import env, run, cd, local, put env.hosts = ['192.168.1.5'] env.user = 'eric' DEPLOY_PATH = '/var/www/' APP_NAME = 'lxneng' APP_PATH = '%s%s'%(DEPLOY_PATH, APP_NAME) DATABASE_CONF_PATH = '/srv/conf/database.yml' Sunday, August 29, 2010
  • pack & upload def pack_code():     local('tar czf /tmp/%s.tgz .'%APP_NAME) def upload_code():     put('/tmp/%s.tgz'%APP_NAME, '/tmp/')     with cd(APP_PATH):         run('tar xzf /tmp/%s.tgz'%APP_NAME) Sunday, August 29, 2010
  • config & restart def conf():     run("cp %s %s/config/"%(DATABASE_CONF_PATH, APP_PATH))     run("ln -nfs /srv/photos %s/public/photos"%APP_PATH)     with cd(APP_PATH):         run("rake db:migrate RAILS_ENV=production") def restart():     run("touch %s/tmp/restart.txt"%APP_PATH) Sunday, August 29, 2010
  • Deploy def deploy():     pack_code()     upload_code()     conf()     restart() Sunday, August 29, 2010
  • define roles env.roledefs = { ‘testing’: [‘192.168.1.5’], ‘staging’: [‘.........’], ‘production’: [‘......’, ‘........’], ‘database’: [‘........’] } def testing(): env.hosts = env.roledefs[‘testing’] env.user = ‘testuser’ # ... def deploy(): # deploy code here fab testing deploy Sunday, August 29, 2010
  • Fabric Commands • require: Make sure that certain environment variables are available. • prompt: Display a prompt to the user and store the input in the given variable. Validation is optional. • put: Upload files to the remote host(s). • get: Download a file from a remote host. • run: Run a shell command on the remote host(s). • sudo: Run a root privileged shell command command on the remote host(s). • local: Run a command locally. Sunday, August 29, 2010
  • Fabric Contrib Commands • rsync_project: Synchronize a remote directory with the current project directory via rsync. • upload_project: Upload the current project to a remote system, tar- gzipping during the move. • exists: Return True if given path exists. • first: Given one or more file paths, returns first one found, or None. • upload_template: Render and upload a template text file to a remote host. • sed: Run a search-and-replace on filename with given regex patterns. • comment/uncomment: Attempt to (un)comment out all lines in filename matching regex. • contains: Return True if filename contains text. • append: Append string (or list of strings) text to filename. • confirm: Ask user a yes/no question and return their response as True / False. Sunday, August 29, 2010
  • Fabric Decorators • hosts: Defines on which host or hosts to execute the wrapped function. • roles: Defines a list of role names, used to look up host lists. • runs_once: Prevents wrapped function from running more than once. @hosts('user1@host1', 'host2', 'user2@host3') @runs_once def my_func(): pass @roles('web') def my_other_func(): pass Sunday, August 29, 2010
  • app fabfile fabfile http://gist.github.com/472566 Sunday, August 29, 2010
  • Reference Fabric documentation http://fabfile.org/ Pythonic Deployment with Fabric 0.9 Fabric: A Capistrano Alternative Sunday, August 29, 2010
  • Q&A Thank You Sunday, August 29, 2010