這才是最好的jenkins教程,maven
前言
衆所周知,Jenkins預設情況下可以實作項目更新(通過SVN),和項目釋出,通過(MAVEN插件),但是這種情況下釋出到一些容器底下(如Tomcat)時,經過多次釋出後JVM會報OutOfMemoryError PermGen space,這個原因是由于這些容器在覆寫老項目後并不會釋放老項目記憶體永久區的資源,久而久之,導緻系統永久區記憶體溢出。為解決這個問題,我們隻有通過釋出後重新啟動容器才能解決該問題。那有什麼辦法可以使容器在釋出新項目後自動重新開機呢?重新開機過程中,我們希望容器正在處理的作業安全完成後(如quartz作業執行完後),容器再重新開機,如何做到?本文要與大家分享的便是其中一種便利安全的方法。
Jenkins安裝與配置
Jenkins是一個開源軟體項目,旨在提供一個開放易用的軟體平台,使持續內建變成可能。
安裝:
官網:http://jenkins-ci.org/
選擇一個作業系統版本的安裝,我這邊選擇的是 Red Hat/Fedora/CentOS版
安裝及啟動過程:
Ruby代碼

rpm -ivh jenkins-1.590-1.1.noarch.rpm
service jenkins start
通路:
http://<ip>:8080/
Publish Over SSH插件安裝
依次單擊“Jenkins->系統管理->管理插件”菜單
在可選插件頁籤中找到勾選Publish Over SSH插件,點選界面下方的直接安裝按鈕。等待jenkins安裝完畢即可。
Publish Over SSH插件配置
全局配置:
依次點開“Jenkins->系統管理->系統設定”菜單
找到Publish over SSH配置項,配置如下配置
底下還有個Test Configuration按鈕,點選,如出現Success則表示配置成功。
最後點選頁底的儲存按鈕,完成配置。
建立Jenkins Item
直接點選Jenkins首頁的建立按鈕,建立一個Maven項目,配置根據大家需要,實際配置,本文僅列出作者的配置,供參考:
如何區分開環境 clean package -Dmaven.test.skip=true -Denv=prod
其中Exec command的腳本是一個shell檔案,放置在遠端釋出機上後,可執行參數有三個,分别如下,第一個參數必填,後面兩個選填,預設值是8080和/save/apache-tomcat-7.0.56,大家可以在第六節的SHELL腳本中改成大家項目中自己的預設參數。

./publish.sh <項目WEB顯示名稱> [TOMCAT端口] [tomcat安裝主目錄]
編寫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。
原因:遠端機器的java_home在配置在/etc/profile中的,這個隻給shell使用者使用的;
但對于ssh 這種非login shell(non-login shell)使用者,需要配置在/etc/bashrc中。
參考配置:

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代碼

cd /home/www/
vim .bash_profile
插入下面3行配置後儲存退出:

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,如需轉載請自行聯系原作者