fabric 自动创建仓库并下载或更新代码

#!/usr/bin/python
# -*- coding: utf-8 -*
from fabric.api import *
from fabric.contrib.files import *

## 需要注意的是,这里的host strings必须由username@host:port三部分构成,缺一不可,否则运行时还是会要求输入密码
env.hosts = [
    'root@2.21.103.123',
]

env.passwords = {
    'root@2.21.103.123:22': '111111',
}

env.sdir="/data/soft/soft/"
env.username = 'wangteng'
env.email = 'wangteng@qq.cn'
env.gitlab_url = 'http://git.qqq.cn/qq_devops/zq.git'


def test_exist_dir():
    # 检查仓库是否已经存在
    if int(run(" [ -e '%s' ] && echo 11 || echo 10" % env.sdir)) == 11:
        result = True
    else:
        result = False
    return result


@task
def git_config():
    # 配置git,这个配置只需一次就好
    try:
        run('git config --global user.name "%s"'%env.username)
        run('git config --global user.email "%s"'%env.email)
        run('git remote add origin %s'%env.gitlab_url)
    except:
        pass


def make_dir():
    # 如果目录不存在,则创建目录,初始化为仓库,并将代码下载到仓库
    run('mkdir -p %s;git init'%(env.sdir,))
    git_config()
    run('cd %s;git clone %s'%(env.sdir,env.gitlab_url))


def get_file():
    # 如果仓库存在,进行代码更新
    dir_name = env.sdir+env.gitlab_url.split('/')[-1].split('.')[0]
    run('cd %s;git pull'%dir_name)


@task
def start():
    flag = test_exist_dir()
    if flag:
        get_file()
    else:
        make_dir()


@task
def no_username_password():
    run('cd /;git config --global credential.helper store')

# fab -f test_fabric.py start --hide status,running,stdout,user,aborts,warnings,stderr 忽略所有输出
原文地址:https://www.cnblogs.com/wt11/p/7345388.html