#coding=utf-8 from fabric.api import local, abort, settings, env, cd, run from fabric.colors import * from fabric.contrib.console import confirm env.hosts = ["root@115.28.×××××"] env.password = "×××××" def get_git_status(): git_status_result = local("git status", capture=True) if "無文件要提交,乾淨的工做區" not in git_status_result: print red("****當前分支還有文件沒有提交") print git_status_result abort("****已經終止") def local_unit_test(): with settings(warn_only=True): test_result = local("python manage.py test") if test_result.failed: print test_result if not confirm(red("****單元測試失敗,是否繼續?")): abort("****已經終止") def server_unit_test(): with settings(warn_only=True): test_result = run("python manage.py test") if test_result.failed: print test_result if not confirm(red("****單元測試失敗,是否繼續?")): abort("****已經終止") def upload_code(): local("git push origin dev") print green("****代碼上傳成功") def deploy_at_server(): print green("****ssh到服務器進行下列操做") with cd("/var/www/××××××"): #print run("pwd") print green("****將在遠程倉庫下載代碼") run("git checkout dev") get_git_status() run("git pull origin dev") print green("****將在服務器上運行單元測試") server_unit_test() run("service apache2 restart", pty=False) print green("****重啓apache2成功") print green("********代碼部署成功********") def deploy(): get_git_status() local("git checkout dev", capture=False) print green("****切換到dev分支") get_git_status() print green("****將開始運行單元測試") local_unit_test() print green("****單元測試完成,開始上傳代碼") upload_code() deploy_at_server()
fabric能夠將自動化部署或者多機操做的命令固化到一個腳本里,從而減小手動的操做。上面是今天第一次接觸這東西后寫的,確實很實用。運行fab deploy
就好了。
主要邏輯就是將本地的dev分支跑單元測試,而後提交到服務器,ssh登錄到服務器,而後pull下來,再跑單元測試,而後重啓apache2。第一次寫,可能比較簡單,將持續改進。python