ホームページ  >  記事  >  バックエンド開発  >  Python 自動デプロイメント ツール Fabric を使い始めるための簡単なガイド

Python 自動デプロイメント ツール Fabric を使い始めるための簡単なガイド

高洛峰
高洛峰オリジナル
2017-01-16 17:43:161388ブラウズ

Fabric は、SSH プロトコルに基づく Python ツールです。従来の ssh/scp 方式と比較して、Python 構文での管理コマンドの記述は、ローカル操作と同様に読みやすく、拡張も容易です。

公式サイトアドレス: http://fabfile.org

インストール
Pythonとpip管理ツールのインストールプロセスを省略します

pip install fabric

インストールが成功したかどうかを確認します
Python編集モードに入り、コードがない場合は入力します。エラーは、インストールが成功したことを意味します

from fabric.api import local

ファブリックのバージョン hello world
ファブリックのデフォルト ファイル fabfile.py もちろん、この名前を使用したくない場合は、-f パラメーターを追加する必要があります

fabfile.py を作成します。ファイル

vim fabrile.py

コードを編集

#coding:utf-8
from fabric.api import local#
def hello():
   # local函数用来执行本地命令
   local('echo "hello wolrd!"')

コードを実行

fab hello

fab -lで確認できます 実行されたタスクは現在hello関数です
動作結果

[localhost] local: echo "hello world!"
hello world!
Done.

従来のメンテナンス方法:

$ ssh x.x.x.x 'uname -a' -- 输出略

ファブリックの例:

$ cat fabfile.py
from fabric.api import run
def uname():
  run('uname -a')
$ fab -H x.x.x.x uname -- 输出略

直観的には、ssh 方式に比べて多くのコードを記述する必要があるように見えますが、ssh 方式に基づいて中間にある制御可能なリンクは比較的少ないです。サービスが起動されていますので、起動されていない場合は起動等を行ってください。 ssh 命令型アプローチは少し面倒です。 (もちろん、操作されているマシン上でスクリプトを作成し、このスクリプトを ssh 経由で呼び出すこともできます) Fabric のいくつかの利点についてお話しましょう:

ロール定義

コードが読みやすい

ローカル操作とリモート操作をカプセル化する(これも必須) system/popen/ssh の操作を自分でカプセル化しますか?)

柔軟なパラメータ (ホスト/ロールなどを動的に指定し、マルチプロセスに基づいて同時実行)

完全なログ出力

これらは日常の作業でも基本的に同様です。しかし、成熟したツールがあるので、それを使用しない手はありません。右。

一般的に使用される構成:

env.hostホスト IP、{'web': ['x', 'y'], 'db': ['z']}

fab -l - 利用可能なタスクを表示します (コマンド) )

fab -H - ホストを指定、サポートされています。複数ホストのカンマは区切られています。 Fab -R - 役割を指定します。複数の

Fab -P -複雑な番号をサポートします。デフォルトはシリアルです。

Fab -W -Warn_only、デフォルトは異常な異常に遭遇し、直接中断する

nginx start') -- リモート sudo を実行します。pty オプションに注意してください

例 1: リモート nginx サービスの管理

$ cat fabfile.py
from fabric.api import *
@task
def nginx_start():
  ''' nginx start '''
sudo('/etc/init.d/nginx start')
 
@task
def nginx_stop():
  ''' nginx stop '''
  sudo('/etc/init.d/nginx stop')
$ fab --list   -- 查看可用命令
Available commands:
 
  nginx_start nginx start
  nginx_stop  nginx stop
 
$ fab -H x.x.x.x nginx_start -- 启动 nginx

例 2: ロールベース

$ cat fabfile.py
from fabric.api import *
env.roledefs = {'nginx': ['x.x.x.x', 'y.y.y.y'], 'mysql': 'z.z.z.z'}
@task
def mysql_start()
  ''' mysql start '''
  sudo('/etc/init.d/mysql start')
$ fab --list   -- 查看可用命令
Available commands:
 
  nginx_start nginx start
  nginx_stop  nginx stop
  mysql_start mysql start
 
$ fab -R nginx nginx_start -- 启动 nginx
$ fab -R mysql mysql_start -- 启动 mysql

例 3: ローカル操作とリモート操作を混在させる

$ cat fabfile
def hello():
  ''' test hello '''
  with lcd('/tmp'): # 切换到 /tmp 目录下
    local('svn co http://xxx xxx') # check 代码到本地
    local('tar czf xxx.tar.gz xxx/') # 压缩本地包
    put('xxx.tar.gz', '/tmp') # 上传压缩包到远程 /tmp 目录下
  with cd('/tmp'):  # 切换到远程 /tmp 目录
    run('tar zxf xxx.tar.gz') # 远程解压

はい Donみんな地元の人に見えませんか?右。

例 4: 複数のターゲット サーバー

同じパスワードまたは手動で入力:

env.hosts = ['root@ip1:22',root@ip2:22]

異なるパスワード、または手動で入力したくない (この方法はロールなしでサーバーのグループを定義することもできます):

#coding:utf-8
from fabric.api import local,cd,put,lcd,env,run,execute,roles
env.roledefs = {
 'role1':['root@ip1:22',],
 'role2':['root@ip2:22',]
}
env.passwords={
 'root@ip1:22':'pwd1',
 'root@ip2:22':'pwd2'
}
@roles('role1')
def role1():
 with cd('/tmp'):
   run('ls -l')
@roles('role2')
def role2():
 with cd('/tmp'):
   run('ls')
def task():
 execute(role1)
 execute(role2)

その他の Python の自動化導入ツール Fabric の簡単な入門ガイドに関連する記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。