尤海娟,張亮,桂康哲,黃麗花
(上汽通用五菱汽車股份有限公司 廣西汽車新四化重點實驗室,廣西柳州,545000)
從軟件和信息技術服務業在我國落根開始,發展力度一直在加大,穩中有進,無論是收入還是利潤增速,都一直在穩定提升,我國在信息技術行業從業人數也一直在穩定增加。我國的信息技術軟件遍地開花,無論是云服務、大數據服務、網絡安全服務還是傳統的工業軟件、網上電商平臺技術服務,跟我國國民的日常生活息息相關。軟件行業在我國有很好的發展潛力,擁有美好的前景。
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語言的軟實力。
因為Java程序遠程自動化發布系統的規模較小,是個人開發,需要在經濟上,規模上,功能支持上來綜合考慮。Python開源免費,不需要付出過多的金錢就可以達到目的,另外Python的輕量、功能支持多和社區解答氛圍的活躍,使得個人開發的阻力也極低。此外,Python有許多可以使用的開源工具,這些能夠極大地減少時間的消耗,讓開發人員能夠更容易地集中精力用于理順程序邏輯,而不需要用太多的額外力氣解決細微末節,因此,綜合考慮下來,采用Python程序語言用來開發遠程自動化發布系統很合適,很順手。
在開發Java程序遠程自動化發布系統前,首先要了解Java程序發布的步驟和順序,這將會成為即將開發的Java程序遠程自動化發布系統的程序內部邏輯支持,Java程序的發布步驟邏輯不難,十分的簡單。理順程序邏輯我們就很容易就開發出程序了,下面介紹的是Java程序發布的步驟,統共分為六個部分,這六個部分分別如下:
第一步:需要準備好即將發布的Java軟件項目,包括已經完成并調試過的整套項目文件,其中包括但不限于代碼文件、數據庫文件、圖片資源、網頁文件和文本文件,軟件項目環境部署的工具。軟件項目可大可小,本次開發的程序發布輔助小工具都會適用。
第二步:需要自行購買云服務器(ECS),這可選擇的選項很多,云服務器相當于不在本地,掛在云端的計算機。云服務器廠商有很多,建議選擇大公司的廠商,這樣子會比較穩定。穩定性可以解決很多麻煩,不用分心,享受友好的服務的同時,也能更好地分配更多的時間用于開發和思考。
第三步:購買云服務器資源后,需要獲取廠商提供的云服務器的一系列信息,這些信息都很重要,需要記住,獲取后需要用這些信息遠程連接云服務器,遠程登錄連接云服務器以后再在服務器上配置程序運行環境,包括但不限于Java環境、tomcat環境和數據庫環境。
第四步:將本地開發好的Java軟件項目部署進云服務器內。將各個文件放入服務器響應的路徑,這一步可以按以往的經驗一樣布置,也可以在這個部分就開始使用小工具進行部署。
第五步:部署好軟件項目到云服務器以后,就可以在云服務器上運行本次的Java項目了,可以根據“http://ip:端口號/項目路徑”這個格式來配置URL,在本地訪問該部署到云服務器的軟件項目。本地訪問可以采用瀏覽器輸入URL的方式進行訪問,像以前訪問別的網頁一樣就行。
第六步:需要購買域名,讓網站可以根據域名的方式來訪問,而不必使用云服務器ip來訪問項目。域名的購買十分的簡單,購買域名成功后需要解析域名了,即把購買的域名和購買的云服務器ip掛靠起來,將域名映射到訪問地址。域名解析之后,通過外網還是暫時不能以域名的方式訪問項目,原因可能出于映射的請求不穩定、需要備案或者還在等待審核。這些可能都要耗費一些時間和精力。
基于Python的Java遠程程序自動化發布系統旨在解決Java程序發布的第四步的痛點,即雖然將程序傳到服務器看起來很簡單,但是,文件良多,程序的維護和修正工作要一直進行的,而且每次可能只修改很小的一部分,不會每次都將一整個項目文件都進行更新,所以,需要一直傳最新更新的個別文件到云服務上,如果單純人工做手動發布,一次兩次無礙,當次數多了,文件多了,對人力資源來說將會面臨大量的浪費。這些會增加用人成本和時間。
基于Python的Java遠程程序自動化發布系統會很好解決這些問題。
理順了程序邏輯以后,我們會發現基于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)對服務器返回的結果進行分析。處理一些另外的事情,如是否要對該軟件項目進行全部編譯等,如是否要刪除一些文件等。
配置完服務器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()方法可以讓我們獲取的時間更易讀。這個方法可以讓我們發現是否網絡存在延遲等等,在寫代碼的時候可以用上。
我們使用的不完全代碼如下:

基于python的遠程自動化發布系統是Java項目開發的好工具,使用得當會在Java程序在系統實現的應用中均取得了顯著的效果。有這個工具,將會減少人為發布程序的時間和成本,是個很好的節約成本的小工具。安裝使用第三方庫paramiko,可以很容易實現我們所需要的功能。