Created
September 25, 2012 20:15
-
-
Save rafaelnovello/3784168 to your computer and use it in GitHub Desktop.
Template de fabfile a ser usado/desenvolvido para automação de deploys.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
import os | |
from fabric.api import local, env, abort, cd, sudo | |
env.hosts = ['IP OU DOMINIO PARA O SERVIDOR'] | |
env.user = 'ubuntu' # UBUNTU É O USUÁRIO PADRÃO DOS NOSSOS SERVIDORES. | |
HOME = os.environ.get("HOME") | |
env.key_filename = os.path.join(HOME, 'CAMINHO PARA A CHAVE PEM') | |
ROOT_FOLDER = os.path.abspath(os.path.dirname(__file__)) | |
REMOTE_USER = 'NOME DO USUÁRIO DA APLICAÇÃO' | |
REMOTE_HOME = 'HOME DO USUÁRIO DA APLICAÇÃO' | |
REMOTE_APP_DIR = 'PATH PARA APLICAÇÃO APÓS DEFINIÇÃO DO AMBIENTE' | |
GIT_CLONE = 'COMANDO DE CLONE DO GIT' | |
django_wsgi_template = """import os | |
import sys | |
path = '/home/cubocc/{0}/web_app' | |
if path not in sys.path: | |
sys.path.append(path) | |
sys.path.append(path + '/cubocc') | |
sys.path.append(path + '/cubocc/cubecc/') | |
sys.path.append(path + '/cubocc/cubecc/cubecc') | |
sys.path.append(path + '/cubocc/cubecc/cubecc/settings') | |
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'cubecc.settings') | |
from django.core.wsgi import get_wsgi_application | |
application = get_wsgi_application() | |
""" | |
def _django_command(cmd, environment='tests'): | |
cmd_template = "python manage.py {0} --pythonpath='%s%s/%s'" % (REMOTE_HOME, environment, REMOTE_APP_DIR) | |
return cmd_template.format(cmd, environment) | |
def collectstatic(environment='tests'): | |
project_dir = os.path.join(REMOTE_HOME, os.path.join(environment, REMOTE_APP_DIR)) | |
with cd(project_dir): | |
sudo(_django_command('collectstatic', environment), user=REMOTE_USER) | |
def syncdb(environment='tests'): | |
project_dir = os.path.join(REMOTE_HOME, os.path.join(environment, REMOTE_APP_DIR)) | |
with cd(project_dir): | |
sudo(_django_command('syncdb', environment), user=REMOTE_USER) | |
def migrate(environment='tests'): | |
project_dir = os.path.join(REMOTE_HOME, os.path.join(environment, REMOTE_APP_DIR)) | |
with cd(project_dir): | |
sudo(_django_command('migrate', environment), user=REMOTE_USER) | |
def run_tests(): | |
with cd(ROOT_FOLDER): | |
local("python manage.py test") | |
def install_requirements(environment='tests'): | |
project_dir = os.path.join(REMOTE_HOME, os.path.join(environment, REMOTE_APP_DIR)) | |
with cd(project_dir): | |
sudo("pip install -r requirements.txt") | |
def create_tag(version=None, comment=None): | |
if version is None: | |
abort("Obrigatorio um nome para a versao") | |
if comment is None: | |
comment = 'Creating tag %s' % version | |
local("git checkout master") | |
local("git merge development") | |
local("git push") | |
local("git tag -a {0} -m '{1}'".format(version, comment)) | |
local("git push --tags") | |
def create_wsgi(environment='tests'): | |
project_dir = os.path.join(REMOTE_HOME, os.path.join(environment, REMOTE_APP_DIR)) | |
with cd(project_dir): | |
django_wsgi = django_wsgi_template.format(environment) | |
sudo('echo "%s" > django.wsgi' % django_wsgi) | |
def deploy(version=None, environment='tests'): | |
if environment not in ['tests', 'staging', 'production']: | |
abort("Ambiente escolhido invalido.") | |
project_dir = os.path.join(REMOTE_HOME, os.path.join(environment, REMOTE_APP_DIR)) | |
try: | |
with cd(project_dir): | |
sudo("git checkout master", user=REMOTE_USER) | |
sudo("git pull --all", user=REMOTE_USER) | |
sudo("git checkout %s" % version, user=REMOTE_USER) | |
create_wsgi(environment) | |
except: | |
project_dir = os.path.join(REMOTE_HOME, os.path.join(environment, "web_app/")) | |
with cd(project_dir): | |
sudo(GIT_CLONE, user=REMOTE_USER) | |
install_requirements(environment) | |
syncdb(environment) | |
migrate(environment) | |
collectstatic(environment) | |
create_wsgi(environment) | |
sudo("service apache2 reload") | |
def full_deploy(version=None, environment='tests'): | |
run_tests() | |
create_tag(version) | |
deploy(version, environment) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment