fabric 自動部署falsk 應用

1.介紹

Fabric 是一個高級 Python (2.7,3.4 +)庫,旨在通過 SSH 遠程執行 shell 命令,從而產生有用的 Python 對象。 它構建在 Invoke (子流程命令執行和命令行特性)和 Paramiko (SSH 協議實現)之上,擴展它們的 api 以相互補充並提供額外的功能。

Fabric 最基本的用途是通過 SSH 在遠程系統上執行 shell 命令,然後(可選)查詢結果。 默認情況下,遠程程序的輸出直接打印到終端,並被捕獲。 

2.安裝

pip install fabric==1.14.0 (python2)
pip install fabric3 (python3)

3.簡單示例:fabfile.py

#!/usr/bin/env python
# coding=utf-8
from fabric.api import *
from fabric.context_managers import *

__author__ = 'jing'

"""
一個自動部署樣例,主要過程是
1.進入項目目錄
2.拉取最新代碼
3.殺掉對應端口的進程
4.啓動服務
5.查看狀態
"""

# 項目配置,可以不參照我的
# 項目目錄
PROJECT_PATH = '/data/project/my_project/'
# 項目名稱,用於ps -ef時查詢
PROJECT_NAME = "my_project"
# 端口
PROJECT_PORT = 5133
# git 分支,由於我配置了ssh 鏈接,所以可以直接拉取代碼
GIT_BRANCH = 'master'


# 服務器配置,名稱可以隨便取
# 用戶名
USER = 'root'
# 外網ip
HOSTS = ['127.0.0.1']
# 密碼
PASSWORD = 'pwd'

# 重點配置
# fabric的上下文環境配置
env.user = USER
env.hosts = HOSTS
env.password = PASSWORD
# 可以把退出換爲警告,以提供更靈活的錯誤處理。如果設置爲False,則一條命令運行失敗會就會退出,不再執行後面的命令。
env.warn_only = True
# 命令執行超時時間
env.command_timeout = 1800
# 連接超時時間
env.timeout = 3000
# 在連接到新服務器時,Fabric 嘗試連接的次數。 由於向後兼容的原因,它默認只有一次連接嘗試。
env.connection_attempts = 300


def check_user():
    # 切換身份
    run("sudo -s ", pty=True)


def pull():
    # 拉取最新代碼
    run('git pull origin %s ' % GIT_BRANCH, pty=False)


def kill_run_procedure():
    run("kill $(lsof -i:%s|awk '{if(NR==2)print $2}')" % PROJECT_PORT)


def restart():
    # 這裏有一個坑,執行source ../venv3/bin/activate命令 進入虛擬環境時會失敗
    # 解決辦法是寫一個shell腳本,執行shell.腳本
    # restart.sh
    # `source /usr/local/pythonvenv/venv3/bin/activate
    # nohup python runserve.py &`

    sudo("sh restart.sh")


def show_result():
    run('ps -ef|grep  %s' % PROJECT_NAME)


def runserver():
    # 進入目錄
    with cd(PROJECT_PATH):
        # 拉取代碼
        pull()
        kill_run_procedure()  # 殺掉正在運行的程序
        # 重新啓動
        restart()
        # 查看結果
        show_result()
        print('結束')

4.執行命令
在命令行裏執行命令  fab -f [文件名] [方法名]

fab -f fabfile.py  runserver

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章