Fabric

  • 파일을 디플로이 하거나, 시스템 태스크를 관리를 간편화 하기 위한 툴이다.
  • command line 기반의 처리 수행

베이스 버젼 :

Python 2.5 ~ 2.7 에서 사용가능하다.

기능 : 간소화된 기능제공

  • SSH를 이용하여 App의 디플로이
  • System 관리 Task 수행

상세기능 :

  • Local/Remote 커맨드 실행, sudo를 이용한 실행가능
  • 파일의 update/download 기능
  • 사용자의 입력에 대한 수치연산 제공.
  • 요청 작업의 취소 처리.

Install

# Python을 이용한 설치. 
pip install fabric

# Ubuntu Linux계열 install 
pip apt-get install fabric

Sample

fabfile.py

from fabric.api import run

def host_type():
    run('uname -s')

실행결과 : $ fab -H localhost host_typye

[localhost] Executing task 'host_type'
[localhost] run: uname -s
[localhost] Login password for 'KIDO':
[localhost] out: Darwin
[localhost] out:

기타 유용한 기능 (서버 디플로이)

deploy_tomcat.py

from fabric.api import env, run, put
import time

# 사용자 아이디/비번설정 
env.user = 'kido'
env.password = 'kido'
env.sudoer = {'user': 'kidoroot', 'password': ''}

# 설치 디렉토리 지정 
CATALINA_HOME = "/usr/home/apps/tomcat"
INSTANCES_BASE = "/usr/home/apps/tomcat"
SCRIPTS_BASE = "/usr/home/apps/script"

# 설치를 위한 파이선 모듈 작성 
def deploy_tomcat(archive_filepath, project, context_name='ROOT'):
    context_path = "%s/%s/webapps/%s.war" % (INSTANCES_BASE, project, context_name)
    run("nohup %s/tomcat.sh %s %s" % (SCRIPTS_BASE, project, 'stop'))
    run("rm -rf %s/%s/webapps/%s/" % (INSTANCES_BASE, project, context_name))

    time.sleep(1)

    # 로컬 빌드 파일을 서버로 업로드 한다. 
    put(archive_filepath, context_path)

    # 서버에서 해당 컨텍스트를 실행한다. 
    run("nohup %s/tomcat.sh %s %s" % (SCRIPTS_BASE, project, 'start'))
    time.sleep(20)

실행

서버상에서 tomcat에 바로 webapps를 이용하는 것이 아니라. test_tomcat와 같은 인스턴스 그룹을 만든경우라고 가정

빌드된 디렉토리는 /usr/home/build_directory/에 ROOT.war로 패키지 된다고 가정.

설치하고자 하는 대상 서버의 호스트는 server_host_address로 지정하고 있다.

fab -f deploy_tomcat.py -H [server_host_address] deploy_tomcat:'/usr/home/build_directory/ROOT.war','test_tomcat'