自动发布(基于python3实现)

实现目的:

有时候想把本地代码打包到服务器上用于联调测试,由于公司项目较多,等jenkins发布要排队耗费好长时间,所以自己写了一个脚本,将本地服务自动打包发布到服务器上。

效果:

最后打成了一个exe,直接点击,一键发布

自动发布(基于python3实现)

实现过程:

核心功能:

1.完成jar包上传

一开始考虑了java,但是后来发现打成exe有点大,就放弃了java,选用了python paramiko

    def ssh_upload(self,fromPath, toPath):

        sftp_client = paramiko.SFTPClient.from_transport(self.t)
        sftp_client.put(fromPath,toPath,callback=self.put_call_back)
        sftp_client.close()
        print("上传成功")

2.完成服务启停

这里讨了一个巧,利用上传shell脚本,命令都写到了shell脚本里,通过调用脚本实现服务的启停

jarfile="bootstrap-1.0.jar"
logfile="output.log"
command="java -jar ${jarfile}"

case "$1" in
    start)
        echo "INFO: Starting $jarfile ..."
        exec nohup $command > $logfile 2>&1 &
    ;;

    stop)
        echo "INFO: stopping $jarfile ..."
        ps -ef | grep "$jarfile" |grep -v 'grep'|awk '{print $2}' | while read pid
        do
            C_PID=$(ps --no-heading $pid | wc -l)
            if [ "$C_PID" == "1" ]; then
                echo "INFO: process(PID=$pid) end!"
                exec kill -9 $pid
            else
                echo "WARN: process(PID=$pid) does not exist!"
            fi
        done
        echo "INFO: $jarfile stopped!"
    ;;
esac

其他功能补充:

1.将maven工程打包,利用python 调用系统命令

    #重新打包项目
    def mvn_package(self):
        os.chdir(self.projectPath)
        os.system('mvn clean')
        os.system('mvn package -Dmaven.test.skip=true')

2.将脚本做成exe

这里使用了pyinstaller,全部命令如下

pip install pyinstaller

pyinstaller  abc.py --onefile

3.界面化

这里使用了tikinter,本来以为是内置想讨巧,不过也不算太复杂

if __name__ == '__main__':
     tk = Tk('开发环境升级发布')
     host = Linux(tk)
     comboxlist= OptionMenu(tk,host.comvalue,*host.choisces)
     comboxlist.pack()
     b = Button(tk,text='发布',command=host.upgrade)
     b.pack()
     tk.mainloop()

4.数据配置化

一开始准备读取数据库,这样就不够独立了,改成了读取配置文件

def __init__(self,tk,timeout=30):
        self.config = configparser.ConfigParser()
        self.config.read('upgrade.ini', encoding='utf-8')
        self.choisces = tuple(json.loads(self.config.get('config', 'envList')))
        self.comvalue=StringVar(tk)
        self.comvalue.set(self.choisces[0])
#  定义环境
[config]
#对应下面的不同环境
envList=["1","2"] 

#对应上面环境
[1]
#服务器地址
host=172.168.1.1
#服务器账号
username=root
#服务器密码
password=root
#本地工程根目录
projectPath=D:\\Users\\IdeaProjects\\server\\
#本地工程打包后目录
srcDir=D:\\Users\\IdeaProjects\\server\\target\\
#服务器jar包存放目录
destDir=/home/test/upgrade
#服务名称
jarName=server-1.0.jar

#对应上面环境
[2]
#服务器地址
host=172.168.1.2
#服务器账号
username=root
#服务器密码
password=root
#本地工程根目录
projectPath=D:\\Users\\IdeaProjects\\client\\
#本地工程打包后目录
srcDir=D:\\Users\\IdeaProjects\\client\\target\\
#服务器jar包存放目录
destDir=/home/test/upgrade
#服务名称
jarName=client-1.0.jar

成果地址:

https://download.csdn.net/download/weixin_39424099/16269659

参考:

1.https://www.jianshu.com/p/dc764cec9fa9

2.https://blog.csdn.net/m0_37264397/article/details/79090754

上一篇:处理tk.mybatis 和 mybatisplus共存不能分页


下一篇:关于tools编写的一些随笔