当前位置:首页 期刊杂志

基于Python的远程自动化程序发布系统

时间:2024-05-04

尤海娟,张亮,桂康哲,黄丽花

(上汽通用五菱汽车股份有限公司 广西汽车新四化重点实验室,广西柳州,545000)

0 前言

从软件和信息技术服务业在我国落根开始,发展力度一直在加大,稳中有进,无论是收入还是利润增速,都一直在稳定提升,我国在信息技术行业从业人数也一直在稳定增加。我国的信息技术软件遍地开花,无论是云服务、大数据服务、网络安全服务还是传统的工业软件、网上电商平台技术服务,跟我国国民的日常生活息息相关。软件行业在我国有很好的发展潜力,拥有美好的前景。

Java进入我国也就十几年的时间,跟随着我国软件行业经济的稳定快速发展,Java在我国的信息技术行业里越发普及,也变得越发举足轻重。基于Java编程语言开发的计算机软件很多,因此Java为人们所重视,被广泛应用在计算机软件的开发上,是和我们息息相关的互联网信息技术,越来越广泛地深入到人们生活的方方面面[1]。

Java 技术具有四大优越的特性,集成了卓越的普遍通用性、性能高效性、高可移植性和高度安全性,可以广泛应用于多种方向,如科学超级计算机、数据中心、移动手机端和互联网等等[2]。Java方向良多,其中的Java EE方向,名为企业级项目开发,可做多种领域,包括但不限于互联网,物流,电力行业,电子商务,证券,大型银行应用,生产制造等等ERP管理软件和其他规模不小的网站和后台的开发应用上[4]。

当开发大型系统应用时,是很难一次就写对代码运行成功没有错误的,往往需要经过测试和许多次的改造才能实现目的,因此也很难一次程序发布完后就当甩手掌柜,常常需要多次的程序发布。假若使用人工发布,将会大大浪费资源。

基于python 开发的Java程序自动化远程发布系统可以会大大减少资源的浪费。

Python是个轻量级的高级程序语言,诞生于1990 年代初,生父为荷兰数学和计算机科学研究学会的Guido van Rossum,初衷是作为ABC语言的替代品。虽然Python易学好懂,但可谓“麻雀虽小,五脏俱全”,Python内置了高效的高级数据结构,可高效地实现面向对象编程[5]。Python的本质是解释型语言,他那言简意赅的语法和动态类型,它成为了大多数开发者快速开发应用会最先想到的高级编程程序语言,它是开源的,所以版本会不断更新,不断添加新功能新特性,可胜任那些独立的、大型的项目开发。

Python解释器基于易扩展性,有需要时,可以使用C语言或C++语言,扩展Python新功能和数据类型[6]。 Python标准库繁多,有适合于各种主要系统平台的源码或机器码,这使Python 也可应用于可定制化系统中的扩展程序语言[7]。Python易学易懂,未来很有可能要跟数学、物理等理科、工科学科进行结合,成为孩子们必须学习的一门课程,也是培养他们能力的核心科目,相信以后Python在中国会越来越流行,这些都将极大地增强Python语言的软实力。

1 开发语言的选用

因为Java程序远程自动化发布系统的规模较小,是个人开发,需要在经济上,规模上,功能支持上来综合考虑。Python开源免费,不需要付出过多的金钱就可以达到目的,另外Python的轻量、功能支持多和社区解答氛围的活跃,使得个人开发的阻力也极低。此外,Python有许多可以使用的开源工具,这些能够极大地减少时间的消耗,让开发人员能够更容易地集中精力用于理顺程序逻辑,而不需要用太多的额外力气解决细微末节,因此,综合考虑下来,采用Python程序语言用来开发远程自动化发布系统很合适,很顺手。

2 Java程序发布的步骤

在开发Java程序远程自动化发布系统前,首先要了解Java程序发布的步骤和顺序,这将会成为即将开发的Java程序远程自动化发布系统的程序内部逻辑支持,Java程序的发布步骤逻辑不难,十分的简单。理顺程序逻辑我们就很容易就开发出程序了,下面介绍的是Java程序发布的步骤,统共分为六个部分,这六个部分分别如下:

第一步:需要准备好即将发布的Java软件项目,包括已经完成并调试过的整套项目文件,其中包括但不限于代码文件、数据库文件、图片资源、网页文件和文本文件,软件项目环境部署的工具。软件项目可大可小,本次开发的程序发布辅助小工具都会适用。

第二步:需要自行购买云服务器(ECS),这可选择的选项很多,云服务器相当于不在本地,挂在云端的计算机。云服务器厂商有很多,建议选择大公司的厂商,这样子会比较稳定。稳定性可以解决很多麻烦,不用分心,享受友好的服务的同时,也能更好地分配更多的时间用于开发和思考。

第三步:购买云服务器资源后,需要获取厂商提供的云服务器的一系列信息,这些信息都很重要,需要记住,获取后需要用这些信息远程连接云服务器,远程登录连接云服务器以后再在服务器上配置程序运行环境,包括但不限于Java环境、tomcat环境和数据库环境。

第四步:将本地开发好的Java软件项目部署进云服务器内。将各个文件放入服务器响应的路径,这一步可以按以往的经验一样布置,也可以在这个部分就开始使用小工具进行部署。

第五步:部署好软件项目到云服务器以后,就可以在云服务器上运行本次的Java项目了,可以根据“http://ip:端口号/项目路径”这个格式来配置URL,在本地访问该部署到云服务器的软件项目。本地访问可以采用浏览器输入URL的方式进行访问,像以前访问别的网页一样就行。

第六步:需要购买域名,让网站可以根据域名的方式来访问,而不必使用云服务器ip来访问项目。域名的购买十分的简单,购买域名成功后需要解析域名了,即把购买的域名和购买的云服务器ip挂靠起来,将域名映射到访问地址。域名解析之后,通过外网还是暂时不能以域名的方式访问项目,原因可能出于映射的请求不稳定、需要备案或者还在等待审核。这些可能都要耗费一些时间和精力。

基于Python的Java远程程序自动化发布系统旨在解决Java程序发布的第四步的痛点,即虽然将程序传到服务器看起来很简单,但是,文件良多,程序的维护和修正工作要一直进行的,而且每次可能只修改很小的一部分,不会每次都将一整个项目文件都进行更新,所以,需要一直传最新更新的个别文件到云服务上,如果单纯人工做手动发布,一次两次无碍,当次数多了,文件多了,对人力资源来说将会面临大量的浪费。这些会增加用人成本和时间。

基于Python的Java远程程序自动化发布系统会很好解决这些问题。

3 程序分析和程序实现

■ 3.1 基于python的远程自动化发布系统逻辑

理顺了程序逻辑以后,我们会发现基于python的远程自动化发布系统逻辑非常简单。大体总结如下:

总体的大概就是连接云服务器,当有文件更新时,根据要上传的文件类型将文件上传至云服务器的相应位置,并根据情况处理一些额外的事件,返回处理结果。

具体程序逻辑内容详细描述如下:

(1)设定云服务器的ip,端口,账号,密码。这将用来连接云服务器。

(2)当有文件更新时,选择需要上传的文件准备上传。

(3)如果要上传的文件是class文件,需要检测该class文件在云服务器的Java项目中是新增还是需要更换。当是需要新增时,将相应jar文件进行备份,再用ftp协议将该class文件上传到相应的jar文件位置即可。但如果是要更换时,程序需要检查云服务器的该class文件在云服务器上,同名class文件所在的jar包位置和class文件在jar包里的路径,可能检测到多个jar包里包含了同名文件,也可能检测到单个jar包里有多个同名class文件。这时要选择哪个路径的class文件才是真正要替换的,对相应的jar包进行自动备份,再替换class文件。可能整个项目中只有一个同名class文件,这时程序会自动备份跟替换。

(4)当文件是其他类型时,如html文件,css文件,图片资源文件等,也是差不多的处理方法。自动备份和替换。新增时是直接插入。

(5)对服务器返回的结果进行分析。处理一些另外的事情,如是否要对该软件项目进行全部编译等,如是否要删除一些文件等。

■ 3.2 基于python的远程自动化发布系统的实现

配置完服务器ip、端口、账号、密码后,使用Python的paramiko远程登陆服务器,paramiko属于第三方库,可以通过“pip3 install paramiko”在本地安装上这个模块,paramiko包含两个核心组件:SSHClient和SFTPClient,SSHClient和SFTPClinet,即一个是远程连接,一个是上传下载服务。

SSHClient的类似于Linux的ssh命令,是对SSH会话的封装,它封装了传输,通道及SFTPClient建立的方式,用于执行远程命令。常用方法有connect()方法,用来实现远程服务器的连接与认证。用exec_command()方法在远程服务器执行Linux命令的方法。open_sftp()方法作用是在当前ssh会话的基础上创建一个sftp会话,该方法会返回一个SFTPClient对象。load_system_host_keys方法加载指定远程主机的公钥文件。

SFTPClient类似于Linux的sftp命令,是对SFTP客户端的封装,可以实现远程文件操作,比如文件上传、下载、修改文件权限等操作。

Paramiko是个遵循SSH2协议,支持以加密和认证的方式远程连接到服务器,它支持Linux, Solaris, BSD, MacOS X, Windows等平台通过SSH从一个平台连接到另外一个平台,是用python写的一个模块工具,可以查看服务器的日志,可以批量配置远程服务器,文件上传,文件下载等,使用Paramiko,我们可以直接使用SSH协议对远程服务器执行操作,而不是通过ssh命令对远程服务器进行操作,它封装了很多常用方法,足够我们使用了。

不完全代码如下:

然后判断文件类型,文件类型有许多种,有jsp文件、js文件、txt文件、html文件、xml文件等等,但处理逻辑大抵相同,根据文件类型做相应的处理,我们使用的服务器系统一般都是Linux,Linux 是一种自由和开放源码的类 UNIX 操作系统,任何个人和机构都可以自由地使用 Linux 的所有底层源代码,也可以自由地修改和再发布。正因为Linux系统的高效、免费和自由,Linux是除了Windows操作系统之外最流行的操作系统,在Linux系统中操作,需要了解一些Linux知识,Linux的命令很多,我们掌握一些常用的Linux命令就行了,学习成本并不是很大,比如上传文件的时候可以使用put方法将我们的文件上传到相应的路径当中,我们要下载的时候,可以使用get方法获取服务器上相应路径之下的我们想要的文件,还有其他的一些我们需要学会的Linux常用的办法如下:

mkdir方法:可以用于创建目录。

remove方法:可以用于删除目录。

rename方法:可以用于重命名。

stat方法:可以用于获取文件信息。

ps方法:可以用于查看Linux系统的进程状态。

chown方法: 可以用于修改所属用户与组。

chmod方法 : 可以用于修改用户的权限。

ls或者ll方法:可以用于获取目录列表。

当我们想要使用paramiko模块操作服务器上文件时,可以先用Linux常用命令构造好cmd语句,再用exec_command方法在远程服务器中执行我们构造好的cmd语句,exec_command方法执行完以后会将元组(stdin,stdout,stderr)作为paramiko.ChanelFile对象返回,我们获取这个元祖,就可以知道在远程服务器当中我们发出的远程命令是否执行成功,再以此为依据决定我们是否要进一步修正我们的代码。

在python当中,time() 方法可以返回当前时间的时间戳。利用time.time()方法,我们可以计算两个时间点之间的间隔,使用time.strftime()方法可以让我们获取的时间更易读。这个方法可以让我们发现是否网络存在延迟等等,在写代码的时候可以用上。

我们使用的不完全代码如下:

4 结论

基于python的远程自动化发布系统是Java项目开发的好工具,使用得当会在Java程序在系统实现的应用中均取得了显著的效果。有这个工具,将会减少人为发布程序的时间和成本,是个很好的节约成本的小工具。安装使用第三方库paramiko,可以很容易实现我们所需要的功能。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!