-
最近學(xué)校開始了校內(nèi)實訓(xùn)科展,說是實訓(xùn),就是拿著各種框架做些小項目,畢竟快畢業(yè)了總得學(xué)點吃飯的家伙伙单,因為我是負責(zé)我們小組的后端開發(fā)书妻,所以經(jīng)常要推jar包上服務(wù)器進行測試船响。每次都得:
- 編寫/修改代碼。
- 本地測試
- build jar
- 通過FileZilla(這個玩意兒很好用,極其友好的sftp軟件)推送到服務(wù)器
- 然后xshell到服務(wù)器
- 關(guān)閉應(yīng)用
- 清空日志(測試日志,就不做長久記錄了)
- 啟動應(yīng)用
就是這一系列的流程驻子,在搞了兩天實在是受不了這個效率了灿意,想要將流程全部自動化,理想目標是直接使用powershell寫個腳本一鍵 build ,推送崇呵,重啟應(yīng)用缤剧,但是由于才疏學(xué)淺,不會寫ps腳本域慷,而且idea的build命令也不透明荒辕,所以選擇退而求其次--Python
-
最開始在度娘和G驢找了一圈,發(fā)現(xiàn)都沒啥現(xiàn)成的解決方案犹褒,于是決定自己寫一個,流程如下:
Build:直接使用IDEA build好抵窒,比maven還要方便。
-
Push to Server:
這里使用的是python的os模塊叠骑,使用popen()調(diào)用本地PS/CMD命令:
a = os.popen('scp -r /filepath userName@host:/userName/...') print(a) #這里因為本機的ssh已經(jīng)被服務(wù)端信任,所以不需要輸入密碼(可以百度如何在Linux服務(wù)器中添加ssh_key) #請確保登錄用戶具有對應(yīng)服務(wù)器文件路徑的操作權(quán)限
由于os.popen()這個函數(shù)是阻塞的李皇,所以看到print輸出證明推送完成。
-
Restart Project&&clean log
最開始是寫了一個關(guān)閉應(yīng)用腳本和一個啟動應(yīng)用的腳本宙枷,但是為了全自動化掉房,就同一改寫到Restart.sh腳本中,該腳本包含了安全關(guān)閉應(yīng)用慰丛,清除log日志卓囚,啟動應(yīng)用。
# 這里的ApplicationName.jar 就是SpringBoot 項目的啟動類的Jar包名诅病。 PID=$(ps -ef | grep ApplicationName.jar | grep -v grep | awk '{ print $2 }') if [ -z "$PID" ] then echo Application is already stopped else echo kill $PID kill $PID fi #休眠兩秒鐘使得應(yīng)用安全退出,當(dāng)然也可以使用 kill -9 $PID 強制退出 sleep 2 # 清理項目控制臺輸出 echo "" > ./nohup.out echo the Application is starting #重啟項目,并且重定向項目控制臺輸出 #后面的Spring.profiles.active 指定項目配置文件 nohup java -jar /path/ApplicationName.jar --spring.profiles.active=dev > ./nohup.out &
以上就是服務(wù)端的重啟應(yīng)用的操作哪亿,接下來就是如何在Python中一鍵完成自動部署的流程了。
-
Do Restart:
一開始本來也想使用os.popen()的方式進行ssh_shell操作,但是發(fā)現(xiàn)這個API是不提供交互式操作的功能贤笆,萬能的G告訴了我有paramiko這個模塊蝇棉,這個模塊提供了兩種ssh命令操作:exec_command()和invoke_shell()兩種操作,其中invoke_shell()提供了交互式Shell操作,所以這里不講exec_command()的使用芥永。
#先安裝paramiko moudle #根據(jù)我大清國情可以切換到清華源 pip install paramiko
import time import paramiko try: trans = paramiko.Transport(('127.0.0.1', 22))#這里填入自己服務(wù)器的IP HOST trans.connect(username='userName', password='******')#對應(yīng)的賬號密碼 ssh = paramiko.SSHClient() ssh._transport = trans client = ssh.invoke_shell() #send()方法就是相當(dāng)于進行Shell交互,記得命令最后加入換行表示在操作中按下ENTER client.send('cd /filePath\n') #sleep保證上一條shell命令成功執(zhí)行(是的,操作是有延遲的,保險一點留了一秒) time.sleep(1) client.send('./restart.sh\n') #sleep保證重啟項目的完整進行 time.sleep(4) output = client.recv(4048).decode('utf-8') print(output) print('success') trans.close() except paramiko.SSHException: print("fail") print("done")
到這里一個全自動的項目部署就完成了,雖然僅僅是可用階段,但是對于我來說還是省去了許多機械重復(fù)的步驟,畢竟代碼存在的意義就是如此银萍。
-
最后放上完整的py文件:
import os import time import paramiko print("start pushing") a = os.popen('scp -r /filepath userName@host:/userName/...') print(a,"successfully pushed") try: trans = paramiko.Transport(('127.0.0.1', 22)) trans.connect(username='userName', password='******') ssh = paramiko.SSHClient() ssh._transport = trans client = ssh.invoke_shell() client.send('cd /filePath\n') time.sleep(1) client.send('./restart.sh\n') time.sleep(4) output = client.recv(4048).decode('utf-8') print(output) print('success') trans.close() except paramiko.SSHException: print("fail") print("done")
THINK MORE...
Python 自動部署JAVA項目
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門麻捻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人呀袱,你說我怎么就攤上這事贸毕。” “怎么了夜赵?”我有些...
- 文/不壞的土叔 我叫張陵明棍,是天一觀的道長。 經(jīng)常有香客問我寇僧,道長摊腋,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任嘁傀,我火速辦了婚禮兴蒸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘细办。我一直安慰自己橙凳,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開白布笑撞。 她就那樣靜靜地躺著岛啸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪娃殖。 梳的紋絲不亂的頭發(fā)上,一...
- 文/蒼蘭香墨 我猛地睜開眼郁稍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了胜宇?” 一聲冷哼從身側(cè)響起耀怜,我...
- 正文 年R本政府宣布,位于F島的核電站拯勉,受9級特大地震影響竟趾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜宫峦,卻給世界環(huán)境...
- 文/蒙蒙 一岔帽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧导绷,春花似錦犀勒、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至檐盟,卻和暖如春褂萧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背葵萎。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 一、Python簡介和環(huán)境搭建以及pip的安裝 4課時實驗課主要內(nèi)容 【Python簡介】: Python 是一個...
- 第一章設(shè)置Python環(huán)境 kali虛擬機 開始用pip安裝github3.py漫雕,沒什么問題 跟著安裝WingID...
- 屯的洗發(fā)水護發(fā)素滨嘱, 也不知道要用到什么時候峰鄙。 單個包裹就7.6KG, 三個估計可達15KG九孩, 生生從小區(qū)門口的自提...