之前写过一篇 python 自动化部署项目,实现了Tomcat项目的初级自动化部署功能,但是它有一个不足,只支持单个项目部署,也就是说,项目被高度定制化了,所有的配置信息都被固化在了程序里,无法扩展。所以今天,我们给它来个小小的升级,让这个工具以界面图形化的方式运行,在这个界面上,支持对要部署的Tomcat项目进行管理。该工具主要解决以下问题(痛点):
系统作了负载均衡处理,项目被分开存放在了多个不同的机器上,同时每个机器上也有多个项目,每次部署的时候,都需要工程师们手动在不同的目录之间来回切换,手动复制、粘贴、备份系统,手动删除缓存文件,手动启停web服务,步骤繁琐且容易出错。此时,如果能有一款工具,能够帮助我们自动化完成这些操作,解放工程师们的双手,应该算是大功一件了!
so,先来张效果图,让我们直观感受下。
下面正式开始!
1. 安装pysimplegui
pip install pysimplegui
2. 编写核心代码
import os
import json
import time
import shutil
import threading
import webbrowser
from gui_helper import GuiHelper
from auto_release import AutoRelease
from PIL import Image as pil_image
import PySimpleGUI as sg
class ProjectDeploy():
# 配置文件
project_file = 'project.json'
left_layout_key = 'left_layout'
right_layout_key = 'right_layout'
default_right_layout_key = 'default_right_layout'
background_image = 'background_image.png'
# 窗口元素的背景色
element_background_color = '#FCFCFC'
def run(self):
self.load_win()
'''
加载窗口
'''
def load_win(self, old_window=None):
# 获取屏幕宽高
(width, height) = GuiHelper.get_window_size()
win_height = int(height)
left_win_width = 150
right_win_width = width - left_win_width
default_right_column_layout = [
GuiHelper.text_input('点击左侧按钮,新建一个项目'),
]
image = pil_image.open(self.background_image)
src_image_size = image.size
background_image_size = (min(src_image_size[0], int(right_win_width*0.7)), min(src_image_size[1], int(win_height*0.7)))
default_right_column_layout.append([sg.Image(filename=self.background_image, size=background_image_size)])
left_columns = [
sg.Column(self.load_left(), key=self.left_layout_key, size=(left_win_width, win_height), background_color=self.element_background_color)
]
right_columns = [
sg.Column(default_right_column_layout, key=self.default_right_layout_key, size=(right_win_width, win_height), background_color=self.element_background_color),
sg.Column(self.load_right(), key=self.right_layout_key, visible=False, size=(right_win_width, win_height), background_color=self.element_background_color, scrollable=True, vertical_scroll_only=True)
]
left_frame = sg.Frame('', [left_columns], background_color=self.element_background_color, border_width=1)
right_frame = sg.Frame('', [right_columns], background_color=self.element_background_color, border_width=0)
layout = [[
sg.Column([[left_frame]], pad=(0,0), background_color=self.element_background_color),
sg.Column([[right_frame]], pad=(30,0), background_color=self.element_background_color)
]]
if old_window is not None:
old_window.close()
window = GuiHelper.create_window('Tomcat项目部署工具', layout = layout)
event_list = self.load_events()
if event_list is not None:
for event_item in event_list:
window[event_item[0]].set_cursor(cursor='hand2')
GuiHelper.listen_window(window, event_list)
GuiHelper.close_window(window)
'''
加载左侧布局
'''
def load_left(self):
left_colu