Linux自動化部署嘗試
最近做一個項目臨近測試,購買的是阿里雲的服務器,每次部署都是手動打包war,然后上傳到服務器,然后修改配置文件,不僅繁瑣,而且費時,就思索着找一個一鍵式的部署方式,今天終於騰出時間來做這件事,記錄一下。
先決條件
- 遠程服務器已配置ssh免密碼登錄(因為免密碼登錄便於實現全自動化)
- 本地具備ssh環境(我的開發環境是windows,嗚嗚。。。我使用的是babun,還不錯,推薦,當然了,我之前是因為其他原因安裝了)
- Linux shell編程(其實這里用的很少),sed工具的使用
主要思路
主要就是將生成的war發布到阿里雲,這里不發布war,直接將tomcat中的工程下的文件拷貝到阿里雲(其實war只是將這些文件壓縮傳輸),然后修改配置文件
- 使用scp將本地文件拷貝到服務器
- 修改阿里雲上的配置文件
copy文件
#!/bin/bash # 切換到tomcat發布目錄,這個目錄前面看起來比較詭異,就是因為使用的是babun cd /cygdrive/d/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps # 復制文件到阿里雲服務器tomcat scp -r ./ test@xx.xxx.xxx.xx:/var/www/tomcat/webapps # 復制完成之后,登錄阿里雲 # 執行遠程服務器上用戶目錄的腳本文件edit.shssh test@xx.xxx.xxx.xx 'sh ~/edit.sh'
好的,看到ssh免密碼登錄的用處了吧,在進行scp拷貝的時候不需要手動參與輸入密碼,在最后執行遠程的服務器腳本的時候也一樣,到目前為止貌似也沒有用到很復雜的shell腳本語法,以前學過shell編程,因為沒有用到,我也沒有記錄(每當這個時候我就覺得現在寫博客是極其正確的)
修改配置文件
上面腳本最后一句話就是執行遠程服務器上的edit.sh,進行修改需要修改的配置文件
#!/bin/bash # 切換到app目錄 cd /var/www/tomcat/webapps/app # 修改applicationContext-context.xml,修改數據庫密碼,因為本地和服務器不是同一個數據庫,修改 sed -i -e 's/name="password" value="root"/name="password" value="xxxx"/' ./WEB-INF/applicationContext-context.xml # 修改config.properties sed -i 's/localhost:8080/xx.xxx.xxx.xx/' ./WEB-INF/classes/config.properties
# 修改日志存放目錄
sed -i -e '12,12s+E://logs/log.log+/var/www/tomcat/logs/log.log+' -e '21,21s+E://logs/error.log+/var/www/tomcat7/logs/error.log+' ./WEB-INF/classes/log4j.properties
大功告成,已經初步實現了一鍵式部署,整個過程不要人參與
改進
- 每次不需要復制改動不頻繁的文件,比如jar包,js類庫就不需要復制
- 想統計每次腳本執行的時間,一開始想在shell腳本里面寫,后來發現了time命令,太強大了,這樣就知道每次腳本執行的時間了
總結
shell腳本
- 腳本中執行shell命令,用反引號包起來,如`date`,查看當時間
- 腳本中的運算,shell腳本本身不支持數學運算,可以通過其他命令來實現,比如awk,expr如
#!/bin/bash ## 注意 # 因為是調用shell命令,所以整個表達式都要用反引號包括 # 在運算符和表達式之間必須有空格 # 腳本中的變量命名和=之間不能有空格 value=`expr 2 + 2` # 使用$引用變量 echo $value
以上內容有參考http://c.biancheng.net/cpp/view/6999.html,其他詳細內容暫時就不再深入了,還是需求驅動學習。
sed命令
強大的嘆為觀止!!這個命令的提供我們不用打開文件就可以直接編輯文件,對於文中用到的幾個用法加以記錄
- sed -i:表示對原文件進行修改,所有修改直接反映到原文件,可以使用 sed -i.bak 將原文件備份后修改原文件
- -e: 表示可以同時進行多個修改,比如文中一次進行了多次替換,每一次修改前使用 -e
- /m,ns/from/to/: s搜索替換命令,和vim的搜索替換命令一致的,搜索第m到n行將 from 替換為 to ,m,n可以不加表示只替換一行,from 和 to 支持正則表達式,如果 from 和 to 中有"/"符號可以使用"\"進行轉義,或者將命令中的"/"寫為"+", +m,ns+from+to+