2014-04-03 36 views
0

我想用bash腳本構建簡單的部署系統。我嘗試過檢查TeamCity和類似的產品,但它們太困難,需要大量時間來了解配置等。所以我的想法是創建一個bash腳本其中:bash腳本簡單的自動部署svn和phpunit

  1. 使用ssh
  2. 獲得當前版本連接到服務器
  3. SVN更新
  4. 運行單元測試
  5. 如果測試失敗 - > SVN了-rXXX

我所取得的成就: 我正在sshpass -p 'pass' ssh [email protected] "svn up; sh tests.sh";它下載到我的服務器COMMITED變化和運行所有的PHP單元測試。

問題是,如果我的測試失敗,我需要手動恢復掛鉤。我可以使用svn info | grep "Revision" | awk '{print $2}'獲得最新的修訂版本,然後仔細閱讀它,但是我找不到在tests.sh中檢查測試是否失敗的方法。任何人有任何想法如何實現這一目標?或者,也許你有更好的建議,以達到相同的結果?

+0

爲什麼不能在另一個結賬測試它,並提升了生產版本,如果測試成功的版本號你剛剛測試過? – Wrikken

+1

如果你使用phpunit,你可以檢查退出代碼。如果它不是零,那麼出錯了 – gontrollez

+0

@Wrikken我沒有版本控制配置文件,所以checkout不起作用。我有開發測試產品版本。 –

回答

0

我已經使用@gontrollez提示構建了它。 ./deploy腳本:

reset; 
sshpass -p 'pass' ssh [email protected] "./update"; 
RET=$?; 
if [ $RET -eq 0 ];then 
    sshpass -p 'pass' ssh [email protected] "./update"; 
    RET=$?; 
    if [ $RET -eq 0 ];then  
     sshpass -p 'pass' ssh [email protected] "./update"; 
     RET=$?; 
     if [ $RET -eq 0 ];then  
      reset; 
      echo "$(tput setaf 2)Success!" 
     else 
      echo "$(tput setaf 1)PROD test failed!" 
     fi 
    else 
     echo "$(tput setaf 1)TEST test failed!" 
    fi 
else 
    echo "$(tput setaf 1)DEV test failed!" 
fi 
echo "$(tput sgr0)" 

./update腳本:

current=$(svn info | grep "Revision" | awk '{print $2}'); 
svn up; 
sh tests.sh; 
OUT=$?; 
if [ $OUT -eq 0 ];then  
    echo "Update successful!" 
else 
    echo "Test failed! Reverting..."; 
    svn up -r$current; 
    $(exit 10); 
fi 

而且tests.sh運行PHPUnit測試