亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

如何通過python的fabric包完成代碼上傳部署

系統 1540 0

首先是安裝fabric包

            
pip install fabric
          

fabric常用參數

-l : 顯示定義好的任務函數名

-f : 指定fab入口文件,默認入口文件名為fabfile.py

-H : 指定目標主機,多臺主機用","號分割

fabric常用API

local : 執行本地命令,如:local('uname -s')

lcd : 切換本地目錄,如:lcd('/home')

cd : 切換遠程目錄,如:cd('/etc')

run : 執行遠程命令,如:run('free -m')

sudo : sudo方式執行遠程命令,如:sudo('touch /abc')

put : 上傳本地文件到遠程主機,如:put('/hello', '/home/baagee/hello')

get : 從遠程主機下載文件到本地,如:get('/home/python/world', '/home/baagee/world')

reboot : 重啟遠程主機,如:reboot()

@task : 函數裝飾器,標識的函數為fab可調用的,非標記的對fab不可見,純業務邏輯

@runs_once : 函數裝飾器,標識的函數只會執行一次,不受多臺主機影響

fabric全局屬性設定

env.hosts : 定義目標主機,如:env.hosts=['192.168.117.192', '192.168.117.193']

env.user : 定義用戶名,如:env.user="root"

env.port : 定義目標主機端口,默認為22,如:env.port="22"

env.password : 定義密碼,如:env.password="lijin"

env.passwords : 不同的主機不同的密碼,如:env.passwords={'baagee@192.168.117.192:22':'lovelijin', 'lijin@192.168.117.193:22':'lovebaagee'}

簡單入門示例

            
from fabric.api import run

def host_type():
  run('uname -s')
          

執行的話就不能用python fabfile.py執行了要使用:fab -f fabfile.py host_type -H baagee@192.168.117.136

意思就是-f指定文件,后面跟要執行的函數,-H指明登錄用戶名和host,

            
[root@localhost pythontest]# fab -f fabfile.py host_type -H baagee@192.168.117.136
[baagee@192.168.117.136] Executing task 'host_type'
[baagee@192.168.117.136] run: uname -s
[baagee@192.168.117.136] Login password for 'baagee':
[baagee@192.168.117.136] out: Linux
[baagee@192.168.117.136] out:


Done.
Disconnecting from baagee@192.168.117.136... done.
[root@localhost pythontest]
          

示例1:動態獲取遠程目錄列表

首先寫個小例子熟悉一下這東西到底要怎么用:

            
from fabric.api import *

env.hosts=['192.168.117.136']
env.user='baagee'
env.password = 'ubuntu@2017'

@runs_once
def input_raw():
  return prompt("please input directory name:", default="/home")

def workask(dirname):
  run('ls -l ' + dirname)

@task
def go():
  print('start ...')
  getdirname = input_raw()
  workask(getdirname)
  print('end ...')
          

go函數是入口函數,首先獲取用戶輸入的路徑,然后ls它,顯示里面的文件就是這么簡單。

執行結果顯示:

            
[root@localhost pythontest]# fab -f test3.py go
[192.168.117.136] Executing task 'go'
start ...
please input directory name: [/home] /home/baagee/baagee-blog
[192.168.117.136] run: ls -l /home/baagee/baagee-blog
[192.168.117.136] out: 總用量 24
[192.168.117.136] out: -rw-rw-r-- 1 baagee baagee  0 8月 22 15:05 abcd
[192.168.117.136] out: drwxrwxr-x 6 baagee baagee 4096 8月  3 10:37 Application
[192.168.117.136] out: drwxrwxr-x 2 baagee baagee 4096 8月  3 10:37 DB_back
[192.168.117.136] out: -rw-rw-r-- 1 baagee baagee 1009 8月  3 10:37 index.php
[192.168.117.136] out: drwxrwxr-x 3 baagee baagee 4096 8月  3 10:37 Public
[192.168.117.136] out: -rw-rw-r-- 1 baagee baagee  97 8月  3 10:37 README.md
[192.168.117.136] out: drwxrwxr-x 8 baagee baagee 4096 8月  3 10:37 ThinkPHP
[192.168.117.136] out:

end ...

Done.
Disconnecting from 192.168.117.136... done.
          

熟悉了之后接下來就是寫一個小程序將本地某個文件夾的代碼上傳到執行服務器,然后執行它;

示例2:上傳文件并執行

首先寫個小代碼:(demo.py)

            
#coding:utf-8
def add(a,b):
  print('開始計算a+b')
  print(a+b)

add(9,1)
          

將本機centos7上的demo.py上傳到ubuntu上并執行:

            
#coding:utf-8
from fabric.api import *

env.user = 'baagee'
env.hosts = ['192.168.117.136']
env.password = 'ubuntu@2017'

@task
@runs_once
def tar_task():
  #進入本地目錄
  with lcd('/home/vagrant/windowshare/pythontest'):
    #打包
    local('tar zcvf demo.tar.gz demo.py')

@task
def put_task():
  #創建遠程服務器文件夾
  run('mkdir -p /home/baagee/testdemo')
  with cd('/home/baagee/testdemo'):
    #上傳文件
    put('/home/vagrant/windowshare/pythontest/demo.tar.gz', '/home/baagee/testdemo/demo.tar.gz')

@task
def check_task():
  #md5驗證文件
  lmd5 = local('md5sum /home/vagrant/windowshare/pythontest/demo.tar.gz', capture=True).split(' ')[0]
  rmd5 = run('md5sum /home/baagee/testdemo/demo.tar.gz').split(' ')[0]
  if lmd5 == rmd5:
    print('md5 OK ...')
  else:
    print('md5 ERROR ...')

@task
def run_task():
  with cd('/home/baagee/testdemo'):
    run('tar zxvf demo.tar.gz')
    run('python demo.py')

@task
def go():
  tar_task()
  put_task()
  check_task()
  run_task()
          

步驟就是

1,找到demo.py打包,。2,上傳,。3,驗證文件md5。4,然后就是解壓執行。

也很簡單,當然你也可以一次性填寫多個host,將他們同時上傳到多臺服務器上。

最后程序在我centos上執行的效果是:

            
[root@localhost pythontest]# fab -f upload1.py go
[192.168.117.136] Executing task 'go'
[localhost] local: tar zcvf demo.tar.gz demo.py
demo.py
[192.168.117.136] run: mkdir -p /home/baagee/testdemo
[192.168.117.136] put: /home/vagrant/windowshare/pythontest/demo.tar.gz -> /home/baagee/testdemo/demo.tar.gz
[localhost] local: md5sum /home/vagrant/windowshare/pythontest/demo.tar.gz
[192.168.117.136] run: md5sum /home/baagee/testdemo/demo.tar.gz
[192.168.117.136] out: 12b4bed255ad7afb6a53cc84bd7a25e7 /home/baagee/testdemo/demo.tar.gz
[192.168.117.136] out:

md5 OK ...
[192.168.117.136] run: tar zxvf demo.tar.gz
[192.168.117.136] out: demo.py
[192.168.117.136] out:

[192.168.117.136] run: python demo.py
[192.168.117.136] out: 開始計算a+b
[192.168.117.136] out: 10
[192.168.117.136] out:


Done.
Disconnecting from 192.168.117.136... done.
          

最后結合git完成代碼部署:

需要服務器和本地都需要安裝git

            
#coding:utf-8
from fabric.api import *
#這兩臺服務器用戶名和密碼都一樣,所以就不用env.passwords了
env.user = 'baagee'
env.hosts = ['192.168.117.192', '192.168.117.193']
env.password = 'pythontestpass'

@runs_once
@task
def local_update():
	#本地代碼上傳到git
  with lcd("/home/baagee/tmp/baageehello"):
    local("git add -A")
    local("git commit -m 'update'")
    local("git pull origin master")
    local("git push origin master")


@task
def remote_update():
	#服務器將git上的代碼拉下來
  with cd("/home/baagee/tmp/baageehello"):
    run("git checkout master")
    run("git pull origin master")

@task
def deploy():
	#本地上傳
  local_update()
  #服務器下拉
  remote_update()
          

over。。。。。。。。。。。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 99视频在线免费看 | 国产精品亚洲一区二区三区正片 | 91破解版在线 | 亚洲 | 国产成人精品亚洲日本在线观看 | 久久精品国产74国产 | 九九精品视频一区二区三区 | 青草免费 | 456性欧美欧美在线视频 | 日韩一区二区在线视频 | 国产亚洲精品热视频在线观看 | 综合色吧| 久99久爱精品免费观看视频 | 色综合久久中文色婷婷 | 国产精品ⅴ视频免费观看 | 开心片色99xxxx | 欧美一区精品二区三区 | 久久久精彩视频 | 久久99青青久久99久久 | 欧美一级精品高清在线观看 | 久草在线观看福利 | 毛片机地 | 狠狠色视频 | 日本特级黄毛片毛片视频 | 一级毛片视频 | 亚洲福利视频一区二区三区 | 四虎国产永久在线观看 | 日韩操 | 欧美特黄aaaaaa | 日本波多野结衣在线 | 天天干天天射天天舔 | 免费h片 | 免费a级毛片出奶水 | 日韩欧美国产一区二区三区四区 | 欧美日韩亚洲无线码在线观看 | 九九视频免费观看 | dxj久久成国产精品 dxj伊人 | 久青草视频 | 婷婷四房| 成人国产精品免费视频不卡 | 久久久久国产精品免费免费不卡 | 91精品乱码一区二区三区 |