`

python fabric编写的本地打包部署工具

阅读更多

1,打包工具使用maven,打包成的war文件会位于项目的target目录

2,管理工具使用git,每次打包之前必须先检查项目是否处于master分支,用于提醒用户先合并master和拉取最新的master代码

3,可以打包和部署多个项目,使用参数化配置,

deploy_remote.py文件内容:

#!/usr/bin/env python
# encoding:utf-8

from fabric.api import *
import time
import os
import sys

TOMCAT_HOME = "/xxx/xxx/apache-tomcat-x.x.x"

servers = [
	'myserver1',
	'myserver2'
]

env.user= "server_username"

env.password = "server_password"

#部署服务器
def deploy(projectname,projectpath):

	#编译打包项目
	print "开始编译项目",projectname
	compile_project(projectname,projectpath)

	#记录当前是第几个服务器
	count = 0

	#部署各个服务器
	for server in servers:
		#累加次数
		count = count + 1
		#开始部署
		print("正在部署服务器:" +  server + " 项目名:" + projectname)
		with settings(host_string = server):
			deploy_one_server(projectname,projectpath)
			print("部署服务器 "+ server +" 项目" + projectname + " 完成!")
			if len(servers) != count :
				print "休息60秒"
				time.sleep(60)

#编译打包项目
def compile_project(projectname,projectpath):
	with lcd(projectpath):
		#检查分支
		check_branch(projectname)
		#打包
		local("mvn clean && mvn install -Premote -Dmaven.test.skip=true")

#检查项目是否在master分支
def check_branch(projectname):
	#查找master分支
	p = os.popen("git branch | grep -e '\* master'");
	found = False;
	while 1:
		line = p.readline()
		if(line.strip() == "* master") :
			found = True
			break
		if not line :
			break

	#检查是否是master分支
	if found :
		print projectname,"项目当前是master分支,可以打包部署"
	else :
		print "***分支错误***",projectname,"项目当前不是master分支,不可以打包部署"
		sys.exit(0)

#部署一个服务器
def deploy_one_server(projectname,projectpath):
	WAR_DIR = projectpath + "/target/"
	warfilename = projectname + ".war"
	#1,上传文件到tomcat根目录
	print("1,上传文件到tomcat根目录")
	with lcd(WAR_DIR):
		with cd(TOMCAT_HOME):
			put(warfilename,warfilename)
			run("ls")

	#2,关闭服务器
	print "2,关闭服务器"
	close_tomcat()

	#3,删除原有的部署文件
	print "3,删除原有的部署文件"
	with cd(TOMCAT_HOME + "/webapps/"):
		run("rm -rf " + projectname + "/")
		run("mv " + warfilename + " ../" + warfilename + ".backup")

	#4,将已上传的文件放到tomcat项目目录
	print "4,将已上传的文件放到tomcat项目目录"
	with cd(TOMCAT_HOME):
		run("mv " + warfilename + " ./webapps/")

	#5,启动服务器
	print "5,启动服务器"
	run(TOMCAT_HOME +"/bin/startup.sh",pty=False)

#关闭tomcat服务器
def close_tomcat():
	#kill可能会因为没有tomcat线程,导致关闭命令失败,所以需要在产生异常时继续执行
	with settings(
		hide('warnings', 'running', 'stdout', 'stderr'),
		warn_only=True
	):
		run("ps -ef |grep tomcat |grep -v grep   |awk -F \" \" '{print $2}' | xargs kill -9")

 

4,使用shell脚本预判断参数正确性,增加脚本的安全性

脚本内容:

#!/usr/local/bin/bash

PYTHON_SCRIPT_PATH="deploy_remote.py"

if [[ $# < 1 ]]; then
  echo "***缺少参数***第一个参数是需要部署的项目,且只接受一个参数,本脚本只能部署a和b项目,其他项目请检查和调整deploy_remote.py脚本"
  exit 0
fi

if [ "$1" = "a" ]; then
  echo "将要编译部署a项目"
  projectpath="/Users/forest/gitwork/$1"
elif [ "$1" = "b" ]; then
  echo "将要编译部署b项目"
  projectpath="/Users/forest/gitwork/$1"
else
  echo "***参数错误***本脚本只能部署a和b项目,其他项目请检查和调整deploy_remote.py脚本"
  exit 0
fi

echo "5秒钟内可以取消部署......"
sleep 5
fab -f $PYTHON_SCRIPT_PATH deploy:projectname=$1,projectpath=$projectpath

 

调用方式:

./deploy_remote.sh a

 传入参数a,开始打包部署a项目

 

 

分享到:
评论

相关推荐

    Python-Fabric是一款django2Fabric3python3开源的代码部署工具

    总结来说,Python Fabric是Python开发者必备的工具之一,它提供了一种高效、灵活的方式来管理和部署代码,特别是在Django项目中,可以极大地提升团队的生产力。通过熟悉和掌握Fabric,你可以创建出更加自动化和可靠...

    Python下Fabric的简单部署方法

    Fabric是一款强大的自动化部署工具,由Python编写而成。它的核心特点在于能够简化复杂的部署过程,通过编写简单的Python脚本来实现远程服务器上的各种任务自动化,例如文件传输、命令执行等。这对于运维人员来说尤其...

    Python自动化运维和部署项目工具Fabric使用实例

    Fabric是一个用Python编写的开源库,主要用于简化系统管理员的任务——实现远程服务器上的自动化部署、管理等操作。它通过SSH协议来与远程服务器交互,允许开发者编写简洁且易于理解的Python脚本来完成一系列复杂的...

    Python库 | fabric-provision-0.0.6.tar.gz

    Fabric是一个强大的命令执行和部署工具,允许开发者通过SSH远程执行命令,简化了运维任务和分布式系统的管理。`fabric-provision`则进一步提升了这种能力,尤其在服务器的批量配置和管理方面,提供了更高级别的抽象...

    Python库 | fabric_am_handlers-0.12-py3-none-any.whl

    这个库的名字暗示了它与`Fabric`库有紧密的关联,`Fabric`是一个强大的命令执行和部署工具,允许开发者编写简单的Python脚本来远程执行命令,进行系统管理或者部署应用。`am_handlers`可能指的是“应用程序管理...

    Python(我的世界)资源-Minecraft1.9.2游戏

    在制作Minecraft模组时,开发者通常会使用文本编辑器编写Python代码,然后利用工具将代码打包成可在游戏中运行的JAR文件。在这个过程中,了解Java和Minecraft的Forge或Fabric等模组加载器也是必要的,因为它们是构建...

    用Python管理linux

    1. **自动化部署**:使用`fabric`库,编写Python脚本来自动化部署应用,包括编译、打包、上传、解压和启动服务。 2. **资源监控脚本**:定期使用`psutil`收集系统资源数据,存储到数据库,供进一步分析和展示。 3....

    Python实现javaweb项目远端自动化更新部署-内含源码以及设计说明书(可以自己运行复现).zip

    在本项目中,Python将作为主要工具来编写自动化部署的逻辑。 2. **远程操作**:远程自动化部署通常会使用SSH(Secure Shell)协议,通过Python的paramiko库或Fabric库来实现在远程服务器上的文件传输和命令执行。 ...

    PyPI 官网下载 | fabric-scripts-0.0.20.tar.gz

    Fabric是一个基于Python的命令执行和部署工具,它允许用户编写简单的Python脚本来远程执行命令,实现自动化运维任务。例如,你可以用Fabric来批量更新服务器上的代码、配置系统服务或者执行性能测试等。它的核心功能...

    Python库 | djaodjin-deployutils-0.5.15.tar.gz

    djaodjin-deployutils是Djaodjin公司开发的一套部署工具,主要服务于Python后端的自动化部署和管理。在0.5.15版本中,它包含了若干个模块和函数,旨在简化和标准化Web应用的部署过程,特别是针对Django框架的应用。 ...

    Python库 | invoke-1.4.1-py2-none-any.whl

    Invoke源于Fabric,一个用于自动化部署的Python库。然而,Invoke更专注于简化日常开发任务,如测试、构建和清理,而不是服务器管理。其核心理念是将每个命令封装为一个独立的函数,并通过命令行接口调用这些函数,...

    Python库 | deployment_director-0.1.2-py2.7.egg

    对于开发语言Python,其社区广泛支持自动化部署工具,如Fabric、Ansible、Docker等。`deployment_director`可能与这些工具类似,提供了灵活的配置选项,允许开发者根据项目需求定制部署流程。例如,它可以处理服务的...

    Python库 | deployv-0.9.121-py2-none-any.whl

    3. **编写部署脚本**:利用deployv库提供的API和工具,编写符合项目需求的部署脚本,定义各个部署阶段的操作。 4. **执行部署**:运行部署脚本,deployv会按照脚本指示执行各项部署任务。 5. **监控与调试**:在...

    python guide

    - **distutils**:Python自带的打包工具。 - **setuptools**:扩展了distutils的功能。 ##### 4.2 冻结代码 冻结是指将代码及其依赖项打包成一个单独的可执行文件。 - **PyInstaller**:用于创建独立的可执行文件...

    Python有价值资源合集

    - **setuptools**:Python包构建工具,支持安装、打包等功能。 - **wheel**:用于Python包的二进制包格式,提高了包的安装速度。 #### Documentation(文档生成) - **Sphinx**:基于Python的文档生成工具,支持...

    hyperledger-fabric-linux-amd64-1.1.0.tar.gz/bin

    2. **链码生命周期管理**:`peer`命令行工具是与Fabric节点交互的接口,用于部署、实例化、升级链码,查询和执行交易。例如,`peer chaincode install`用于将链码包上传到节点,`peer chaincode instantiate`则用于...

    Python_TOOLS_ANSWER_jb51.zip

    5. **自动化工具**:`cron`或者Python的`schedule`库可以实现定时任务,而`fabric`或`invoke`则可用于远程服务器操作和部署。 6. **版本控制系统**:如Git,用于跟踪代码的更改历史,协同开发,以及回溯错误。 7. ...

    devops持续集成自动化部署常用功能

    综上所述,"devops持续集成自动化部署常用功能"涉及到的技术栈广泛,涵盖从编写Shell、Java和Python脚本,到选择和配置合适的持续集成工具,再到实现自动化部署的全过程。理解和掌握这些知识点,对于提升团队的开发...

    riotkit-do:RKD-RiotKit DO。 任务执行器-Makefile和Gradle之间的平衡。 用Python编写。 适用于每个DevOps的强大工具。 自动化生产任务以及本地开发任务

    在Python的世界里,虽然有许多自动化工具,如Fabric和 Invoke,但RiotKit DO 提供了一种独特的解决方案,特别关注于任务管理和执行的灵活性。通过使用Python,它允许开发者利用Python的丰富库和语法,使得编写任务...

    python自动化运维记录共5页.pdf.zip

    15. **容器化技术**:Docker和Kubernetes等容器化工具可以将应用打包,实现快速部署和扩展。 以上知识体系可能在"python自动化运维记录共5页.pdf"文档中有所涉及,通过学习和实践,运维人员能够提升工作效率,降低...

Global site tag (gtag.js) - Google Analytics