天天看點

Jenkins+SVN+Maven+Shell 實作項目一鍵釋出

這才是最好的jenkins教程,maven

前言

衆所周知,Jenkins預設情況下可以實作項目更新(通過SVN),和項目釋出,通過(MAVEN插件),但是這種情況下釋出到一些容器底下(如Tomcat)時,經過多次釋出後JVM會報OutOfMemoryError PermGen space,這個原因是由于這些容器在覆寫老項目後并不會釋放老項目記憶體永久區的資源,久而久之,導緻系統永久區記憶體溢出。為解決這個問題,我們隻有通過釋出後重新啟動容器才能解決該問題。那有什麼辦法可以使容器在釋出新項目後自動重新開機呢?重新開機過程中,我們希望容器正在處理的作業安全完成後(如quartz作業執行完後),容器再重新開機,如何做到?本文要與大家分享的便是其中一種便利安全的方法。

Jenkins安裝與配置

Jenkins是一個開源軟體項目,旨在提供一個開放易用的軟體平台,使持續內建變成可能。

安裝:

官網:http://jenkins-ci.org/

選擇一個作業系統版本的安裝,我這邊選擇的是 Red Hat/Fedora/CentOS版

安裝及啟動過程:

Ruby代碼  

Jenkins+SVN+Maven+Shell 實作項目一鍵釋出

rpm -ivh jenkins-1.590-1.1.noarch.rpm     

service jenkins start  

通路:

http://<ip>:8080/

Publish Over SSH插件安裝

Jenkins+SVN+Maven+Shell 實作項目一鍵釋出

依次單擊“Jenkins->系統管理->管理插件”菜單

Jenkins+SVN+Maven+Shell 實作項目一鍵釋出

在可選插件頁籤中找到勾選Publish Over SSH插件,點選界面下方的直接安裝按鈕。等待jenkins安裝完畢即可。

Jenkins+SVN+Maven+Shell 實作項目一鍵釋出

Publish Over SSH插件配置

全局配置:

Jenkins+SVN+Maven+Shell 實作項目一鍵釋出

依次點開“Jenkins->系統管理->系統設定”菜單

找到Publish over SSH配置項,配置如下配置

Jenkins+SVN+Maven+Shell 實作項目一鍵釋出

底下還有個Test Configuration按鈕,點選,如出現Success則表示配置成功。

Jenkins+SVN+Maven+Shell 實作項目一鍵釋出

最後點選頁底的儲存按鈕,完成配置。

Jenkins+SVN+Maven+Shell 實作項目一鍵釋出

建立Jenkins Item

直接點選Jenkins首頁的建立按鈕,建立一個Maven項目,配置根據大家需要,實際配置,本文僅列出作者的配置,供參考:

Jenkins+SVN+Maven+Shell 實作項目一鍵釋出
Jenkins+SVN+Maven+Shell 實作項目一鍵釋出
Jenkins+SVN+Maven+Shell 實作項目一鍵釋出
Jenkins+SVN+Maven+Shell 實作項目一鍵釋出

如何區分開環境 clean package -Dmaven.test.skip=true -Denv=prod

Jenkins+SVN+Maven+Shell 實作項目一鍵釋出

其中Exec command的腳本是一個shell檔案,放置在遠端釋出機上後,可執行參數有三個,分别如下,第一個參數必填,後面兩個選填,預設值是8080和/save/apache-tomcat-7.0.56,大家可以在第六節的SHELL腳本中改成大家項目中自己的預設參數。

Jenkins+SVN+Maven+Shell 實作項目一鍵釋出

./publish.sh <項目WEB顯示名稱> [TOMCAT端口] [tomcat安裝主目錄]  

編寫Shell腳本

需要在你釋出的目标機器上編寫該腳本,你也可以在開發環境編好後,放到目标機器上,以下給出我的腳本:

Jenkins+SVN+Maven+Shell 實作項目一鍵釋出

#!/bin/bash  

#defined   

TOMCAT_HOME="/save/apache-tomcat-7.0.56"  

TOMCAT_PORT=8080  

PROJECT="$1"  

#param validate  

if [ $# -lt 1 ]; then    

  echo "you must use like this : ./publish.sh <projectname> [tomcat port] [tomcat home dir]"    

  exit    

fi   

if [ "$2" != "" ]; then  

   TOMCAT_PORT=$2  

fi  

if [ "$3" != "" ]; then  

   TOMCAT_HOME="$3"  

#shutdown tomcat  

"$TOMCAT_HOME"/bin/shutdown.sh  

echo "tomcat shutdown"  

#check tomcat process  

tomcat_pid=`/usr/sbin/lsof -n -P -t -i :$TOMCAT_PORT`  

echo "current :" $tomcat_pid  

while [ -n "$tomcat_pid" ]  

do  

 sleep 5  

 tomcat_pid=`/usr/sbin/lsof -n -P -t -i :$TOMCAT_PORT`  

 echo "scan tomcat pid :" $tomcat_pid  

done  

#publish project  

echo "scan no tomcat pid,$PROJECT publishing"  

rm -rf "$TOMCAT_HOME"/webapps/$PROJECT*  

cp /save/$PROJECT*.war "$TOMCAT_HOME"/webapps/$PROJECT.war  

#bak project  

BAK_DIR=/save/bak/$PROJECT/`date +%Y%m%d`  

mkdir -p "$BAK_DIR"  

cp "$TOMCAT_HOME"/webapps/$PROJECT.war "$BAK_DIR"/"$PROJECT"_`date +%H%M%S`.war  

#remove tmp  

rm -rf /save/$PROJECT*.war  

#start tomcat  

"$TOMCAT_HOME"/bin/startup.sh  

echo "tomcat is starting,please try to access $PROJECT conslone url"   

該腳本具有自動安全停Tomcat,自動釋出項目,自動備份已釋出項目版本的功能。

需要注意的是你連上來的admin使用者需要具有執行該檔案的權限,如果沒有可以

chmod 600(或755) publish.sh

具體權限給多少,根據你們的需要,決定權在你們手上。

如果shell執行出現如下錯誤,則可能是你在etc/profile中設定了JAVA_HOME,同時您還需要在/etc/bashrc也設定JAVA_HOME。

Jenkins+SVN+Maven+Shell 實作項目一鍵釋出

原因:遠端機器的java_home在配置在/etc/profile中的,這個隻給shell使用者使用的;

但對于ssh 這種非login shell(non-login shell)使用者,需要配置在/etc/bashrc中。

參考配置:

Jenkins+SVN+Maven+Shell 實作項目一鍵釋出

export JAVA_HOME=/usr/java/jdk1.6.0_45  

export JAVA_BIN=/usr/java/jdk1.6.0_45/bin  

export PATH=$PATH:$JAVA_HOME/bin  

如果以上配置還不能解決你的問題,嘗試下去的做法:

---------------------------------------------修改.bash_profile檔案開始----------------------------------

修改.bash_profile檔案方式是使用者級的,對目前使用者可用,其它使用者無法使用。這種方式一般用于生産。.bash_profile檔案在使用者的根目錄,比如說www使用者的根目錄是/home/www。

具體配置如下:

Java代碼  

Jenkins+SVN+Maven+Shell 實作項目一鍵釋出

cd /home/www/  

vim .bash_profile  

插入下面3行配置後儲存退出:

Jenkins+SVN+Maven+Shell 實作項目一鍵釋出

export JAVA_HOME=/usr/java/jdk1.6.0_45/  

export PATH=$JAVA_HOME/bin:$PATH  

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar  

---------------------------------------------修改.bash_profile檔案結束----------------------------------

本文轉自 liqius 51CTO部落格,原文連結:http://blog.51cto.com/szgb17/1956416,如需轉載請自行聯系原作者