欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2019年07月29日 09:48:01   作者:baagee  
這篇文章主要介紹了如何通過(guò)python的fabric包完成代碼上傳部署,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

首先是安裝fabric包

pip install fabric

fabric常用參數(shù)

-l : 顯示定義好的任務(wù)函數(shù)名

-f : 指定fab入口文件,默認(rèn)入口文件名為fabfile.py

-H : 指定目標(biāo)主機(jī),多臺(tái)主機(jī)用","號(hào)分割

fabric常用API

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

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

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

run : 執(zhí)行遠(yuǎn)程命令,如:run('free -m')

sudo : sudo方式執(zhí)行遠(yuǎn)程命令,如:sudo('touch /abc')

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

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

reboot : 重啟遠(yuǎn)程主機(jī),如:reboot()

@task : 函數(shù)裝飾器,標(biāo)識(shí)的函數(shù)為fab可調(diào)用的,非標(biāo)記的對(duì)fab不可見(jiàn),純業(yè)務(wù)邏輯

@runs_once : 函數(shù)裝飾器,標(biāo)識(shí)的函數(shù)只會(huì)執(zhí)行一次,不受多臺(tái)主機(jī)影響

fabric全局屬性設(shè)定

env.hosts : 定義目標(biāo)主機(jī),如:env.hosts=['192.168.117.192', '192.168.117.193']

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

env.port : 定義目標(biāo)主機(jī)端口,默認(rèn)為22,如:env.port="22"

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

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

簡(jiǎn)單入門示例

from fabric.api import run

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

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

意思就是-f指定文件,后面跟要執(zhí)行的函數(shù),-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:動(dòng)態(tài)獲取遠(yuǎn)程目錄列表

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

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函數(shù)是入口函數(shù),首先獲取用戶輸入的路徑,然后ls它,顯示里面的文件就是這么簡(jiǎn)單。

執(zhí)行結(jié)果顯示:

[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.

熟悉了之后接下來(lái)就是寫一個(gè)小程序?qū)⒈镜啬硞€(gè)文件夾的代碼上傳到執(zhí)行服務(wù)器,然后執(zhí)行它;

示例2:上傳文件并執(zhí)行

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

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

add(9,1)

將本機(jī)centos7上的demo.py上傳到ubuntu上并執(zhí)行:

#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():
  #進(jìn)入本地目錄
  with lcd('/home/vagrant/windowshare/pythontest'):
    #打包
    local('tar zcvf demo.tar.gz demo.py')

@task
def put_task():
  #創(chuàng)建遠(yuǎn)程服務(wù)器文件夾
  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驗(yàn)證文件
  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,驗(yàn)證文件md5。4,然后就是解壓執(zhí)行。

也很簡(jiǎn)單,當(dāng)然你也可以一次性填寫多個(gè)host,將他們同時(shí)上傳到多臺(tái)服務(wù)器上。

最后程序在我centos上執(zhí)行的效果是:

[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: 開(kāi)始計(jì)算a+b
[192.168.117.136] out: 10
[192.168.117.136] out:


Done.
Disconnecting from 192.168.117.136... done.

最后結(jié)合git完成代碼部署:

需要服務(wù)器和本地都需要安裝git

#coding:utf-8
from fabric.api import *
#這兩臺(tái)服務(wù)器用戶名和密碼都一樣,所以就不用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():
	#服務(wù)器將git上的代碼拉下來(lái)
  with cd("/home/baagee/tmp/baageehello"):
    run("git checkout master")
    run("git pull origin master")

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

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 循環(huán)神經(jīng)網(wǎng)絡(luò)TextRNN實(shí)現(xiàn)情感短文本分類任務(wù)

    循環(huán)神經(jīng)網(wǎng)絡(luò)TextRNN實(shí)現(xiàn)情感短文本分類任務(wù)

    這篇文章主要為大家介紹了循環(huán)神經(jīng)網(wǎng)絡(luò)TextRNN實(shí)現(xiàn)情感短文本分類任務(wù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Linux下多個(gè)Python版本安裝教程

    Linux下多個(gè)Python版本安裝教程

    這篇文章主要為大家詳細(xì)介紹了Linux下多個(gè)Python版本的安裝教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • python之os路徑被轉(zhuǎn)義的問(wèn)題

    python之os路徑被轉(zhuǎn)義的問(wèn)題

    這篇文章主要介紹了python之os路徑被轉(zhuǎn)義的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Django DRF路由與擴(kuò)展功能的實(shí)現(xiàn)

    Django DRF路由與擴(kuò)展功能的實(shí)現(xiàn)

    這篇文章主要介紹了Django DRF路由與擴(kuò)展功能的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • python獲得linux下所有掛載點(diǎn)(mount points)的方法

    python獲得linux下所有掛載點(diǎn)(mount points)的方法

    這篇文章主要介紹了python獲得linux下所有掛載點(diǎn)(mount points)的方法,涉及Python操作Linux下掛載點(diǎn)的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • 基于PyQt5制作數(shù)據(jù)處理小工具

    基于PyQt5制作數(shù)據(jù)處理小工具

    這篇文章主要和大家介紹了如何利用Python中的PyQt5模塊制作一個(gè)數(shù)據(jù)處理小工具,可以實(shí)現(xiàn)根據(jù)每個(gè)Excel數(shù)據(jù)文件里面的Sheet批量將數(shù)據(jù)文件合并成為一個(gè)匯總后的Excel數(shù)據(jù)文件,需要的可以參考一下
    2022-03-03
  • python將文本轉(zhuǎn)換成圖片輸出的方法

    python將文本轉(zhuǎn)換成圖片輸出的方法

    這篇文章主要介紹了python將文本轉(zhuǎn)換成圖片輸出的方法,涉及Python操作文本及圖片的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • pytorch torchvision.ImageFolder的用法介紹

    pytorch torchvision.ImageFolder的用法介紹

    今天小編就為大家分享一篇pytorch torchvision.ImageFolder的用法介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • 詳談python3中用for循環(huán)刪除列表中元素的坑

    詳談python3中用for循環(huán)刪除列表中元素的坑

    下面小編就為大家分享一篇詳談python3中用for循環(huán)刪除列表中元素的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • Python基礎(chǔ)數(shù)據(jù)類型tuple元組的概念與用法

    Python基礎(chǔ)數(shù)據(jù)類型tuple元組的概念與用法

    元組(tuple)是 Python 中另一個(gè)重要的序列結(jié)構(gòu),和列表類似,元組也是由一系列按特定順序排序的元素組成,這篇文章主要給大家介紹了關(guān)于Python基礎(chǔ)數(shù)據(jù)類型tuple元組的概念與使用方法,需要的朋友可以參考下
    2021-07-07

最新評(píng)論