使用fabric实现简单自动部署

来源:互联网 发布:淘宝直通车找词 编辑:程序博客网 时间:2024/06/04 21:15
公司测试服务更新比较频繁,为了简化过程,实现以下简单的自动部署
部署流程大概如下图

这里写图片描述

经过多番周折终于在同事的提示下找到了 fabric,但苦于对python不熟,经过一番折腾终于初步实现了以上功能,大概步骤记录如下:
  1. 安装python,我使用ubuntu环境,此步骤省略,如有需要请自行百度。。。(目前fabric貌似仅支持python2.x)
  2. 安装fabric
    官方指导文档安装方式如下
    pip install fabric
    但安装过程中可能会出现编译错误的情况,请根据实际情况自行查找原因
    我在此过程中遇到以下两个问题
    1 python.h缺失,使用 apt-get install python-dev即可解决
    2 忘了。。。也是个.h文件缺失,解决方式如上
  3. 编写代码
# -*- coding: utf-8 -*-'''Created on 2017年5月24日@author: mqy参数说明:python auto.py 提供5个运行参数 参数 1 #秘钥位置参数 2 #服务器地址参数 3 #tomcat 在服务器的路径参数 4 #项目名称参数 5 #打包好的项目位置'''import datetimeimport timeimport osimport sysfrom fabric.context_managers import cdfrom fabric.operations import local, put, sudofrom fabric.state import env#tomcat 在服务器的路径default_tomcat_path = '/usr/local/tomcat'#服务器地址default_server_host = '127.0.0.1'#秘钥位置default_key_path = '~/key.pem'#项目名称default_project_name = 'project'#打包好的项目位置default_project_path = '~/project.war'def copy_to_server():    local(        "scp -i {key_path} {product_path} ubuntu@{host}:/tmp/{target_name}".format(            key_path=default_key_path, product_path=default_project_path, host=default_server_host,target_name=default_project_name+".war"))def kill_service():    set_env(default_server_host)    sudo("kill -9 $(ps -ef|grep -i %s|grep  -v 'grep'|awk '{print $2}')" % default_tomcat_path)def bak_service():    set_env(default_server_host)    with cd("{baseServiceHome}/webapps".format(baseServiceHome=default_tomcat_path)):        sudo('cp ./{baseService} ../bak/{time}.war.bak'.format(baseService=default_project_name, time=time.mktime(datetime.datetime.now().timetuple())))def remove_old_service():    set_env(default_server_host)    with cd("{baseServiceHome}/webapps".format(baseServiceHome=default_tomcat_path)):        sudo('rm -rf ./{service_name}'.format(service_name=default_project_name))        sudo('rm ./{service_name}'.format(service_name=default_project_name+".war"))def deploy_new_service():    set_env(default_server_host)    with cd("{base_service_home}/webapps".format(base_service_home=default_tomcat_path)):        sudo("mv /tmp/{service_file} ./".format(service_file=default_project_name+".war"))def start_service():    set_env(default_server_host)    with cd("{base_service_home}/bin".format(base_service_home=default_tomcat_path)):        sudo("set -m;./startup.sh")def set_env(host):    env.host_string = host    env.user = "ubuntu"    env.key_filename = default_key_path    env.warn_only = Truedef deploy():    copy_to_server()    kill_service()    bak_service()    remove_old_service()    deploy_new_service()    start_service()if __name__ == '__main__':    for i in range(len(sys.argv)):        if i==0:            pass        if i==1:            default_key_path=sys.argv[1]        if i==2:            default_server_host=sys.argv[2]        if i==3:            default_tomcat_path=sys.argv[3]        if i==4:            default_project_name=sys.argv[4]        if i==5:            default_project_path=sys.argv[5]    print default_key_path+"==="+default_server_host+"===="+default_tomcat_path+"====="+default_project_name+"======"+default_project_path    deploy()

由于本人第一次编写python代码,以上过程还真是有些离奇,但好在功能已经初步实现。也不枉费我折腾一天。

原创粉丝点击