jdk環境:1.8
linux版本:CentOS 6.10
git版本:2.1.1
maven版本:3.5.4
預先準備jdk(略)
1、安裝所需插件:Git plugin、Maven Integration plugin
一、安裝部署jenkins
1、下載rpm文件:
下載地址:http://mirrors.jenkins-ci.org/redhat/
該示例下載的是 jenkins-2.222-1.1.noarch.rpm
網站上直接下載可能會比較慢 可點擊此處在csdn下載 jenkins-2.222-1.1.noarch.rpm
2、上傳到服務器並安裝
rpm -ivh jenkins-2.222-1.1.noarch.rpm
3、修改jenkins端口(默認8080)
vim /etc/sysconfig/jenkins
4、啓動和重啓jenkins
service jenkins start
service jenkins restart
啓動如若報錯:Starting Jenkins bash: /usr/bin/java: No such file or directory(沒有找到java)
解決方案:vim /etc/init.d/jenkins 添加jdk路徑
5、訪問jenkins
訪問地址:http://ip:6060
首次進入會出現以下內容
cat /var/lib/jenkins/secrets/initialAdminPassword
按照提示去服務器上覆制密碼粘貼到輸入框中登錄
6、安裝插件和創建用戶
首次登錄成功後會進入安裝插件頁面和創建用戶頁面,插件安裝推薦的就行,其他的按照指引一步一步操作
(如果你jenkins不是中文的,安裝兩個插件:Locale和Localization: Chinese,然後在系統管理->系統配置裏Locale的默認語言改爲zn_CN)
二、安裝部署maven
1、下載、解壓、移動、刪除安裝包
wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
tar zxf apache-maven-3.5.4-bin.tar.gz
mv apache-maven-3.5.4 /usr/local/maven
rm -f apache-maven-3.5.4-bin.tar.gz
2、設置環境變量
vim /etc/profile 在最底下添加下面兩行
export M2_HOME=/usr/local/maven
export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin
保存後執行 source /etc/profile
3、查看maven版本:mvn -v
出現以下內容即安裝成功
三、安裝部署Git
1、下載並安裝
yum -y install libcurl-devel expat-devel curl-devel gettext-devel openssl-devel zlib-devel
yum -y install gcc perl-ExtUtils-MakeMaker
cd /usr/local/src/
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.1.1.tar.gz
tar -zvxf git-2.1.1.tar.gz
cd git-2.1.1
make prefix=/usr/local/git all
make prefix=/usr/local/git install
2、添加git到環境變量
echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc
source /etc/bashrc
3、查看git版本及所在路徑 git --version
四、jenkins部署maven項目
1、安裝所需插件:Git plugin、Maven Integration plugin
2、全局工具配置
jdk路徑:/usr/local/jdk1.8.0_221/ (jdk安裝的實際路徑)
git路徑:/usr/local/git/bin/git
maven路徑:/usr/local/maven
3、憑據(配置git的用戶名和密碼,或者ssh)
這裏以用戶名和密碼爲例
(ssh需要服務器生成公私鑰,然後在相關的git遠程倉庫配置公鑰,最後再把私鑰按照下方例子選擇ssh添加到Private Key)
如圖所示按照順序添加git賬戶和密碼
4、創建一個maven項目
源碼管理 輸入遠程倉庫地址並選擇剛配置好的憑據
構建觸發器和構建環境
勾選:
Build whenever a SNAPSHOT dependency is built
觸發遠程構建 (例如,使用腳本) (每當代碼提交到倉庫,會觸發鉤子程序,jenkins會去自動部署構建)
WebHooks配置這裏以阿里雲code(基於gitlab)爲例
找到相關的倉庫 點擊設置 會有一個WebHooks的菜單,點擊WebHooks
WebHook示例:http://www.baidu.com/job/test-admin/build?token=ADMIN
測試時如出現Hook executed successfully but returned HTTP 403 Err message is large錯誤
前往jenkins 系統管理--全局安全管理--授權策略 改爲以下示例
5、maven項目構建詳細配置
Root POM爲:pom.xml
Goals and options輸入:clean package -Dmaven.test.skip=true
(-Dmaven.test.skip=true 可選 代表不執行測試用例,也不編譯測試用例類。)
Post Steps選擇第一個Run only if build succeeds(僅在構建成功時執行)
Execute shell輸入:
BUILD_ID=DONTKILLME
sudo cp /var/lib/jenkins/workspace/test-admin/target/test-admin-0.0.1-SNAPSHOT.jar /home/admin/data/package/test-admin-0.0.1-SNAPSHOT.jar
sudo nohup /home/admin/data/sh/test-admin.sh restart 2>&1 &
構建完可在/var/lib/jenkins/workspace/可查看具體構建的項目,在相關的target目錄下找到需要啓動的jar包 然後執行啓動腳本
/home/admin/data/sh/test-admin.sh 爲自動部署腳本 內容爲:
#!/bin/bash
#修改爲jar包實際路徑
SpringBoot=/home/admin/data/package/test-admin-0.0.1-SNAPSHOT.jar
if [ "$1" = "" ];
then
echo -e "\033[0;31m 未輸入操作名 \033[0m \033[0;34m {start|stop|restart|status} \033[0m"
exit 1
fi
if [ "$SpringBoot" = "" ];
then
echo -e "\033[0;31m 未輸入應用名 \033[0m"
exit 1
fi
function start()
{
count=`ps -ef |grep java|grep $SpringBoot|grep -v grep|wc -l`
if [ $count != 0 ];then
echo "$SpringBoot is running..."
else
echo "Start $SpringBoot success..."
#nohup java -jar $SpringBoot > /dev/null 2>&1 &
nohup /usr/local/jdk1.8.0_221/bin/java -jar $SpringBoot --spring.profiles.active=test > /home/admin/data/logs/test-admin/catalina.out 2>&1
fi
}
function stop()
{
echo "Stop $SpringBoot"
boot_id=`ps -ef |grep java|grep $SpringBoot|grep -v grep|awk '{print $2}'`
count=`ps -ef |grep java|grep $SpringBoot|grep -v grep|wc -l`
if [ $count != 0 ];then
kill $boot_id
count=`ps -ef |grep java|grep $SpringBoot|grep -v grep|wc -l`
boot_id=`ps -ef |grep java|grep $SpringBoot|grep -v grep|awk '{print $2}'`
kill -9 $boot_id
fi
}
function restart()
{
stop
sleep 2
start
}
function status()
{
count=`ps -ef |grep java|grep $SpringBoot|grep -v grep|wc -l`
if [ $count != 0 ];then
echo "$SpringBoot is running..."
else
echo "$SpringBoot is not running..."
fi
}
case $1 in
start)
start;;
stop)
stop;;
restart)
restart;;
status)
status;;
*)
echo -e "\033[0;31m Usage: \033[0m \033[0;34m sh $0 {start|stop|restart|status} {SpringBootJarName} \033[0m
\033[0;31m Example: \033[0m
\033[0;33m sh $0 start esmart-test.jar \033[0m"
esac
6、最後點擊應用保存 執行
第二列:烏雲和太陽的圖標代表最近構建的情況
查看具體執行情況時可查看控制檯日誌
當執行結果爲Finished: SUCCESS即代表成功,最後再去確認下項目是否獲取最新代碼並重啓了
7、注意事項
可能會因爲jenkins沒有sudo權限而執行失敗
解決方案 切換爲root用戶 在/etc/sudoers找到 ## Same thing without a password 然後在下方添加
jenkins ALL=(ALL) NOPASSWD: ALL
具體步驟:
su - root chmod u+w /etc/sudoers vim /etc/sudoers #添加 jenkins ALL=(ALL) NOPASSWD: ALL chmod u-w /etc/sudoers
或者直接改變jenkins用戶
vim /etc/sysconfig/jenkins 找到JENKINS_USER="jenkins"
將JENKINS_USER="jenkins"改爲JENKINS_USER="root"
JENKINS_USER="root"
重啓:service jenkins restart