Python 自動部署JAVA項目

  • 最近學(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...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市恤左,隨后出現(xiàn)的幾起案子贴唇,更是在濱河造成了極大的恐慌搀绣,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件戳气,死亡現(xiàn)場離奇詭異链患,居然都是意外死亡,警方通過查閱死者的電腦和手機瓶您,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門麻捻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人呀袱,你說我怎么就攤上這事贸毕。” “怎么了夜赵?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵明棍,是天一觀的道長。 經(jīng)常有香客問我寇僧,道長摊腋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任嘁傀,我火速辦了婚禮兴蒸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘细办。我一直安慰自己橙凳,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布笑撞。 她就那樣靜靜地躺著岛啸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪娃殖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天议谷,我揣著相機與錄音炉爆,去河邊找鬼。 笑死卧晓,一個胖子當(dāng)著我的面吹牛芬首,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播逼裆,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼郁稍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了胜宇?” 一聲冷哼從身側(cè)響起耀怜,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤恢着,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后财破,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體掰派,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年左痢,在試婚紗的時候發(fā)現(xiàn)自己被綠了靡羡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡俊性,死狀恐怖略步,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情定页,我是刑警寧澤趟薄,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站拯勉,受9級特大地震影響竟趾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜宫峦,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一岔帽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧导绷,春花似錦犀勒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至檐盟,卻和暖如春褂萧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背葵萎。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工导犹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人羡忘。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓谎痢,卻偏偏與公主長得像,于是被迫代替她去往敵國和親卷雕。 傳聞我的和親對象是個殘疾皇子节猿,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一、Python簡介和環(huán)境搭建以及pip的安裝 4課時實驗課主要內(nèi)容 【Python簡介】: Python 是一個...
    _小老虎_閱讀 5,746評論 0 10
  • =========================================================...
    _燈火闌珊處閱讀 2,422評論 0 3
  • 第一章設(shè)置Python環(huán)境 kali虛擬機 開始用pip安裝github3.py漫雕,沒什么問題 跟著安裝WingID...
    何苦_python_java閱讀 3,431評論 0 1
  • 在億萬人海里 我能畫出遇見的每一個人 卻唯獨畫不出你 我覺得你是無可比擬的 世間所有的顏色 都描不出你的模樣 我甘...
    鐘春生的詩閱讀 160評論 0 1
  • 屯的洗發(fā)水護發(fā)素滨嘱, 也不知道要用到什么時候峰鄙。 單個包裹就7.6KG, 三個估計可達15KG九孩, 生生從小區(qū)門口的自提...
    十八呆閱讀 175評論 0 0