예제 #1
0
def local_clone():
    """Checkout code to local machine, then upload to servers"""
    # set new release env
    prepare_for_checkout()
    
    # start
    cache_name = 'code_%s.tar.bz2' % env.commit_hash[:15]
    
    local_cache = '/tmp/' + cache_name

    if not os.path.isfile(local_cache):
        local('git archive --remote=%(git_clone)s %(git_branch)s | bzip2 > %(local_cache)s' % {
            'git_clone': env.git_clone,
            'git_branch': env.git_branch,
            'local_cache': local_cache,
        })
    
    put(local_cache, '/tmp/')
    
    sudo_run('mkdir -p %(current_release)s' % {
        'current_release': env.current_release,
    })
    
    with cd(env.current_release):
        sudo_run('tar jxf %(local_cache)s' % {
            'local_cache': local_cache,
        })
예제 #2
0
def remote_export():
    """Checkout code to the remote servers"""
    # set new release env
    prepare_for_checkout()
    
    # start
    cache_name = 'code_%(app_name)s_%(svn_revision)s_%(current_revision)s' % {
        'app_name': env.app_name,
        'svn_revision': env.svn_revision,
        'current_revision': env.current_revision,
    }
    
    local_cache = '/tmp/'+cache_name
    
    # svn auth
    svn_username_opt = ''
    if env.svn_username:
        svn_username_opt = '--username %(svn_username)s' % {'svn_username': env.svn_username}
    
    svn_password_opt = ''
    if env.svn_password:
        svn_password_opt = '--password %(svn_password)s' % {'svn_password': env.svn_password}
    
    sudo_run('svn export -r %(svn_revision)s %(svn_repo)s %(local_cache)s %(svn_username_opt)s %(svn_password_opt)s' % {
        'svn_revision': env.svn_revision,
        'svn_repo': env.svn_repo,
        'local_cache': local_cache,
        'svn_username_opt': svn_username_opt,
        'svn_password_opt': svn_password_opt,
    })
    
    sudo_run('mv %(local_cache)s %(current_release)s' % {
        'local_cache': local_cache,
        'current_release': env.current_release,
    })
예제 #3
0
 def task(self):
     """Clean up old releases"""
     if len(env.releases) > 3:
         directories = env.releases
         directories.reverse()
         del directories[:3]
         env.directories = ' '.join(['%(releases_path)s/%(release)s' %
                                     {'releases_path': env.releases_path, 'release': release} for release in directories])
         sudo_run('rm -rf %(directories)s' % {'directories': env.directories})
예제 #4
0
def symlink():
    """Updates the symlink to the most recently deployed version"""
    for dirname in env.shared_dirs:
        cmd = 'ln -nfs %(shared_path)s/%(dirname)s %(current_release)s/%(dirname)s' % {
            'shared_path': env.shared_path,
            'current_release': env.current_release,
            'dirname': dirname,
        }
        sudo_run(cmd)
예제 #5
0
def rollback_code():
    """Rolls back to the previously deployed version"""
    if len(env.releases) >= 2:
        env.current_release = env.releases[-1]
        env.previous_revision = env.releases[-2]
        env.current_release = '%(releases_path)s/%(current_revision)s' %\
                              {'releases_path': env.releases_path, 'current_revision': env.current_revision}
        env.previous_release = '%(releases_path)s/%(previous_revision)s' %\
                               {'releases_path': env.releases_path, 'previous_revision': env.previous_revision}
        sudo_run('rm %(current_path)s; ln -s %(previous_release)s %(current_path)s && rm -rf %(current_release)s' %
                 {'current_release': env.current_release, 'previous_release': env.previous_release, 'current_path': env.current_path})
예제 #6
0
    def task(self):
        """Prepares one or more servers for deployment"""
        sudo_run('mkdir -p %(domain_path)s/{releases,shared}' % {
                 'domain_path': env.domain_path})

        if env.shared_dirs:
            dirs = ','.join(env.shared_dirs)
            if len(env.shared_dirs) > 1:
                dirs = '{'+dirs+'}'

            sudo_run('mkdir -p %(shared_path)s/%(dirs)s' % {
                     'shared_path': env.shared_path, 'dirs': dirs})

        permissions()
예제 #7
0
def local_export():
    """Checkout code to local machine, then upload to servers"""
    # set new release env
    prepare_for_checkout()
    
    # start
    cache_name = 'code_%(app_name)s_%(svn_revision)s_%(current_revision)s' % {
        'app_name': env.app_name,
        'svn_revision': env.svn_revision,
        'current_revision': env.current_revision,
    }
    
    # svn auth
    svn_username_opt = ''
    if env.svn_username:
        svn_username_opt = '--username %(svn_username)s' % {'svn_username': env.svn_username}
    
    svn_password_opt = ''
    if env.svn_password:
        svn_password_opt = '--password %(svn_password)s' % {'svn_password': env.svn_password}

    cmd = ('svn export -r %(svn_revision)s %(svn_repo)s '
           '/tmp/%(cache_name)s %(svn_username_opt)s %(svn_password_opt)s') % {
        'svn_revision': env.svn_revision,
        'svn_repo': env.svn_repo,
        'cache_name': cache_name,
        'svn_username_opt': svn_username_opt,
        'svn_password_opt': svn_password_opt,
    }
    local(cmd)
    
    local('cd /tmp/ && tar cvzf %(cache_name)s.tar.gz %(cache_name)s' % {
        'cache_name': cache_name,
        })
    
    put('/tmp/%(cache_name)s.tar.gz' % {'cache_name': cache_name}, '/tmp/')
    
    with cd('/tmp'):
        sudo_run('tar -xvf %(cache_name)s.tar.gz' % {
            'cache_name': cache_name,
            })
        
        sudo_run('mv %(cache_name)s %(current_release)s' % {
            'cache_name': cache_name,
            'current_release': env.current_release,
        })
예제 #8
0
 def task(self):
     """Restarts your application"""
     try:
         if env.wsgi_path.startswith('/'):
             # user specifies absolute path
             touch_file_path = env.wsgi_path
         else:
             # relative path. In this case, I prefer "env.domain_path/env.wsgi_path"
             # but original author choose "env.current_release/env.wsgi_path",
             # for backward compatibility, follow it
             touch_file_path = '%(current_release)s/%(wsgi_path)s' %\
                               {'current_release': env.current_release,
                                'wsgi_path': env.wsgi_path}
         sudo_run('touch %s' % touch_file_path)
     except AttributeError:
         try:
             sudo_run(env.restart_cmd)
         except AttributeError:
             pass
예제 #9
0
def localcopy():
    """ Deploy local copy to servers """
    # set new release env
    prepare_for_checkout()
    
    # start
    cache_name = 'code_%s.tar.bz2' % env.commit_hash[:15]
    
    cmd = ('cp -rf %(localcopy_path)s /tmp/%(cache_name)s && '
           'cd /tmp/ && tar cvzf %(cache_name)s.tar.gz %(cache_name)s') % {
        'localcopy_path': env.localcopy_path,
        'cache_name': cache_name,
    }
    local(cmd)
    
    # We add a guid for tmp folder on server is to avoid conflict
    # when deploying onto localhost, mainly for testing purpose.
    server_tmp_folder = '/tmp/%(guid)s' % {'guid': uuid.uuid4().hex}
    
    sudo_run('mkdir -p %(dir)s && chmod 777 %(dir)s' % {'dir': server_tmp_folder})
    
    put('/tmp/%(cache_name)s.tar.gz' % {'cache_name': cache_name}, server_tmp_folder)
    
    with cd(server_tmp_folder):
        sudo_run('tar -xvf %(cache_name)s.tar.gz' % {
            'cache_name': cache_name,
            })
        
        sudo_run('mv %(cache_name)s %(current_release)s' % {
            'cache_name': cache_name,
            'current_release': env.current_release,
        })
예제 #10
0
def remote_clone():
    """Checkout code to the remote servers"""
    # set new release env
    prepare_for_checkout()
    
    # start
    cache_name = 'code_%s.tar.bz2' % env.commit_hash_cache
    
    local_cache = '/tmp/'+cache_name
    
    sudo_run('git archive --remote=%(git_clone)s %(git_branch)s | bzip2 > %(local_cache)s' % {
        'git_clone': env.git_clone,
        'git_branch': env.git_branch,
        'local_cache': local_cache,
    })
    
    sudo_run('mkdir -p %(current_release)s' % {
        'current_release': env.current_release,
    })
    
    with cd(env.current_release):
        sudo_run('tar jxf %(local_cache)s' % {
            'local_cache': local_cache,
        })
예제 #11
0
def set_current():
    """Sets the current directory to the new release"""
    sudo_run('ln -nfs %(current_release)s %(current_path)s' %
             {'current_release': env.current_release, 'current_path': env.current_path})