您好,登錄后才能下訂單哦!
摘要 jenkins自動化部署項目,通過jenkins 部署來節省運維時間,不需要手動cp上線及版本發布
Jenkins
Jenkins 自動化部署上線
(1) Java 環境演示 [Jenkins和Tomcat在一臺服務器上]
(2) Java 環境演示 [Jenkins和Tomcat不在一臺服務器上]
(3) Java 環境演示 [上線腳本]
(4) NodeJs 環境演示 [上線腳本]
一、Jenkins是什么
二、上線流程圖
三、Jenkins安裝配置
四、Jenkins 自動化部署項目案例
Jenkins是一款自包含的開源自動化服務,可用于自動執行與構建,測試和交付或部署軟件有關的各種任務。 Jenkins目前可以通過本地系統軟件包Docker進行安裝,甚至可以通過任何安裝了Java運行環境的計算機獨立運行
既然我們說到自動化上線,我們就不得不說說一個項目上線的流程.只有規范起來才可以做到不出事故!
上線流程圖如下圖所示
Jenkins依賴Java環境,我們需要安裝Java環境以及相關的環境準備
###關閉防火墻
$ iptables -F
$ iptables -X
$ systemctl stop firewalld
$ systemctl disable firewalld
###安裝yum源
$ wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
$ wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
$ yum clean all && yum makecache
1.下載Jdk包
下載地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
上傳jdk包到服務器
###解壓拷貝jdk
$ tar xf jdk-8u171-linux-x64.tar.gz -C /usr/local/
$ ln -s /usr/local/jdk1.8.0_171/ /usr/local/jdk
$ ln -s /usr/local/jdk/bin/java /usr/bin/java
###設置環境變量
$ vim /etc/profile
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
$ source /etc/profile
2.安裝Jenkins
$ wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
$ rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
$ yum install jenkins -y
$ systemctl start jenkins
##如果我們啟動Jenkins出現錯誤可以直接使用systemctl status jenkins查看錯誤
jenkins相關目錄釋義:
(1)/usr/lib/jenkins/:jenkins安裝目錄,war包會放在這里。 (2)/etc/sysconfig/jenkins:jenkins配置文件,“端口”,“JENKINS_HOME”等都可以在這里配置。 (3)/var/lib/jenkins/:默認的JENKINS_HOME。 (4)/var/log/jenkins/jenkins.log:jenkins日志文件。
檢查端口是否存在
3.配置Jenkins
Jenkins有安全策略,我們按照提示拷貝驗證碼即可
將驗證碼復制到Web框里
我們這里使用推薦就可以了,因為后期我們都可以在安裝
安裝插件中,有的插件會因為網絡問題無法安裝成功
我們這里可以創建一個管理員,或者直接使用admin
我們最好不要直接使用admin
安裝完成訪問地址:iP:8080
到這里我們Jenkins已經安裝成功,剩下的就是配置插件和配置環境
因為我們目前什么都沒有需要安裝插件,點擊下步安裝插件
為了模擬環境我們需要安裝Jenkins一些相關插件
下面2個maven 插件都需要勾選
插件名稱:maven lntergration
我們勾選安裝重啟
安裝完成后如下圖所示
默認是沒有下面的maven項目的
4.Jenkins配置項目
配置SVN地址
因為我是新建的Jenkins目錄,沒有權限,所以需要創建一個用于認證.
填寫SVN地址,因為我這里的svn已經鏈接到ldap,所以不需要輸入svn的密碼,默認這里是svn的用戶和密碼
具體文章可以參考 VisualSVN 遷移至Linux SVN+Apache+ssl集成LDAP
認證成功之后
了解maven 配置
首先我們的svn分支下面需要有pom.xml
繼續往下
↓
↓
↓
↓
因為我們只安裝maven的插件,并沒有安裝maven服務,所以這里需要我們配置
我們就在這里添加一個名字,maven就自動安裝了
Maven安裝完成了,需要依賴吧都是從maven.apache.org下載會比較慢,所以我們指定私服的地址,因為在實際生產中也都是使用私服的。
在maven的配置文件里面也需要配置 配置文件
conf/settings.xml
因為我們所使用的是Jenkins的自動安裝,而不是指定路徑所以我們要查到這個配置文件
maven 自動安裝的配置路徑
配置Maven倉庫地址
這里配置的都是私服地址
相關文章 Jenkins+Maven+SVN+Nexus 搭建持續集成環境
配置Maven 鏡像地址
配置Maven 編譯參數 [研發都會]
相關文章:maven 編譯命令
這個pom.xml里面配置是私服的地址 因為代碼里面有很多東西是需要拉去依賴包,這些依賴包就存放在本地的私有倉庫里(Nexus)
代碼中pom.xml配置如下
私有倉庫的地址
5.構建測試
控制臺輸出說明
6.Jenkins 工程目錄
可以通過修改Jenkins主目錄
Jenkins打包好后的目錄,這個war包就是我們需要拷貝的tomcat下面的
因為目前環境原因,我這里只是截圖Jenkins發布的流程(本次演示只是針對測試環境日常發布版本)
1.Jenkins 配置
SVN部分配置
maven及腳本設置
2.不發腳本配置如下:
相關參考:Jenkins可用環境變量列表
腳本的存放路徑可以在系統管理->全局配置->Jenkins路徑
Last login: Thu Jun 28 18:01:59 2018 from 172.16.29.39
[root@tomcat ~]# cat /jenkins/deploy.sh
#!/bin/bash
#
# Jenkins工程構建通用TOMCAT部署腳本
# @author abcdocker
# @create_time 2017-08-19
#
# 在Jenkins內配置部署單元參數
# 參數格式:MAVEN_MODULE_NAME:TOMCAT_ABSOLUTE_PATH MAVEN模塊名稱:需要部署的目標TOMCAT絕對路徑
# 只有單個部署單元且沒有Maven子模塊時,模塊名稱參數可以沒有,參數格式為:TOMCAT_ABSOLUTE_PATH
#
# 注意:
# 在本部署腳本內會執行TOMCAT啟動腳本,為避免Jenkins在構建成功以后殺掉所有衍生的后臺進程,需要在Jenkins內配置全局環境變量 BUILD_ID 值為 allow_to_run_as_daemon
#
#
DEPLOY_TARGET_TOMCAT=$TOMCAT
#校驗部署參數,不能為空
if [ -z "$DEPLOY_TARGET_TOMCAT" ]
then
echo
echo 部署參數為空,部署失敗!
echo "#####################################################################"
echo
echo 單個部署單元參數格式:
echo MAVEN_MODULE_NAME:TOMCAT_ABSOLUTE_PATH MAVEN模塊名稱:需要部署的目標TOMCAT絕對路徑
echo
echo 多個部署單元參數格式:(多個部署單元使用空格分割)
echo MAVEN_MODULE_NAME:TOMCAT_ABSOLUTE_PATH MAVEN_MODULE_NAME:TOMCAT_ABSOLUTE_PATH
echo
echo "#####################################################################"
exit 1
fi
echo
echo 部署參數:${DEPLOY_TARGET_TOMCAT}
TOMCAT_ARR=${DEPLOY_TARGET_TOMCAT//;/ }
ARR=($TOMCAT_ARR)
ARR_LEN=${#ARR[*]}
echo 共 ${ARR_LEN} 個部署單元
i=1
#獲取Jenkins傳入的目標TOMCAT組
for T in $TOMCAT_ARR
do
echo
echo 開始 處理第 ${i} 個部署單元
echo 第一個部署單元:$T
#獲取目標TOMCAT的WAR路徑和TOMCATA的絕對路徑
TOMCAT_PARAM=(${T//:/ })
MODULE_NAME=${TOMCAT_PARAM[0]}
TARGET_TOMCAT_PATH=${TOMCAT_PARAM[1]}
WAR_PATH="$WORKSPACE/$MODULE_NAME/target/*.war"
echo 部署單元模塊名稱:"${MODULE_NAME}"
echo 部署WAR包路徑:"${WAR_PATH}"
echo 部署TOMCAT路徑:"${TARGET_TOMCAT_PATH}"
#需要考慮MAVEN單模塊下的部署問題
#if [ "${#ARR[*]}" -eq 1 -a -z "$TARGET_TOMCAT_PATH" ]
if [ "$ARR_LEN" -eq 1 -a -z "$TARGET_TOMCAT_PATH" ]
then
#MAVEN過程沒有子模塊,單個部署單元
TARGET_TOMCAT_PATH=$MODULE_NAME
MODULE_NAME="NULL"
fi
#校驗參數,WORKSPACE變量來自于Jenkins環境變量
if [ -z "$MODULE_NAME" -o ! -f $WAR_PATH ]
then
echo 錯誤:MAVEN部署模塊名稱 參數為空 或 找不到WAR包!
echo 部署失敗!
exit 1
fi
if [ -z "$TARGET_TOMCAT_PATH" -o ! -d "$TARGET_TOMCAT_PATH" ]
then
echo 錯誤:目標TOMCAT絕對路徑 參數為空 或 該TOMCAT目錄不存在!
echo 部署失敗!
exit 1
fi
echo 開始清理目標TOMCAT啟動進程...
TOMCAT_PID=`ps -ef |grep "$TARGET_TOMCAT_PATH" |grep "start" |awk '{print $2}'`
if [ -n "$TOMCAT_PID" ]
then
echo TOMCAT_${i},PID${TOMCAT_PID},正在結束該進程...
kill -9 $TOMCAT_PID && echo PID${TOMCAT_PID} 已被干掉!
else
echo TOMCAT_${i} 進程未啟動!
fi
echo 開始清理目標TOMCAT緩存...
rm -rf $TARGET_TOMCAT_PATH/webapps/*
rm -rf $TARGET_TOMCAT_PATH/logs/*
rm -rf $TARGET_TOMCAT_PATH/work/*
echo 開始部署WAR包...
cp -a $WAR_PATH $TARGET_TOMCAT_PATH/webapps/ROOT.war && echo WAR包部署完畢。
echo 開始啟動目標TOMCAT服務...
sleep 10
/bin/bash $TARGET_TOMCAT_PATH/bin/startup.sh
echo 開始配置web目錄的FTP權限...
#啟動過程會自動解壓WAR包,所以在這里需要等待WAR包解壓完成再調整目錄權限
sleep 30
chown -R vftpuser.vftpuser ${TARGET_TOMCAT_PATH}/webapps/ && echo 目錄權限配置完畢。
echo 部署成功
echo 完成 第 ${i} 個部署單元處理。
echo
((i++))
done
3.構建效果如下圖所示:
上面的腳本是針對Jenkins和Tomcat都在相同的目錄,有的時候我們測試環境會存在不在一臺服務器的情況,腳本如下
只是腳本簡單的修改
[root@tomcat ~]# cat /jenkins/ysc.sh
#!/bin/bash
#
# Jenkins工程構建通用TOMCAT部署腳本
# @author 劉曙
# @create_time 2017-08-19
#
# 在Jenkins內配置部署單元參數
# 參數格式:MAVEN_MODULE_NAME:TOMCAT_ABSOLUTE_PATH MAVEN模塊名稱:需要部署的目標TOMCAT絕對路徑
# 只有單個部署單元且沒有Maven子模塊時,模塊名稱參數可以沒有,參數格式為:TOMCAT_ABSOLUTE_PATH
#
# 注意:
# 在本部署腳本內會執行TOMCAT啟動腳本,為避免Jenkins在構建成功以后殺掉所有衍生的后臺進程,需要在Jenkins內配置全局環境變量 BUILD_ID 值為 allow_to_run_as_daemon
#
#
DEPLOY_TARGET_TOMCAT=$YSC
HOST=root@172.16.1.35
#校驗部署參數,不能為空
if [ -z "$DEPLOY_TARGET_TOMCAT" ]
then
echo
echo 部署參數為空,部署失敗!
echo "#####################################################################"
exit 1
fi
echo
echo 部署參數:${DEPLOY_TARGET_TOMCAT}
TOMCAT_ARR=${DEPLOY_TARGET_TOMCAT//;/ }
ARR=($TOMCAT_ARR)
ARR_LEN=${#ARR[*]}
echo 共 ${ARR_LEN} 個部署單元
i=1
#獲取Jenkins傳入的目標TOMCAT組
for T in $TOMCAT_ARR
do
echo
echo 開始 處理第 ${i} 個部署單元
echo 第一個部署單元:$T
#獲取目標TOMCAT的WAR路徑和TOMCATA的絕對路徑
TOMCAT_PARAM=(${T//:/ })
MODULE_NAME=${TOMCAT_PARAM[0]}
TARGET_TOMCAT_PATH=${TOMCAT_PARAM[1]}
#WAR_PATH="/jenkins/workspace/ysc-all/${MODULE_NAME}/target/*.war"
WAR_PATH="${WORKSPACE}/${MODULE_NAME}/target/*.war"
echo 部署單元模塊名稱:"${MODULE_NAME}"
echo 部署WAR包路徑:"${WAR_PATH}"
echo 部署TOMCAT路徑:"${TARGET_TOMCAT_PATH}"
#判斷IP是否有相關目錄
ssh 172.16.1.35 "[ -d $TARGET_TOMCAT_PATH ]" >/dev/null 2>&1
if [ $? != 0 ];then
echo 錯誤
else
echo 正確
fi
#校驗參數,WORKSPACE變量來自于Jenkins環境變量
if [ -z "$MODULE_NAME" -o ! -f $WAR_PATH ]
then
echo 錯誤:MAVEN部署模塊名稱 參數為空 或 找不到WAR包!
echo 部署失敗!
exit 1
fi
#scp 軟件包
ssh $HOST /etc/init.d/${MODULE_NAME} stop
ssh 172.16.1.35 "[ -d $TARGET_TOMCAT_PATH/webapps/ROOT/ ]" >/dev/null 2>&1
if [ $? = 0 ];then
ssh 172.16.1.35 rm -rf $TARGET_TOMCAT_PATH/webapps/ROOT
if [ $? = 0 ];then
scp $WAR_PATH root@172.16.1.35:$TARGET_TOMCAT_PATH/webapps/ROOT.war && echo WAR包部署完畢。
echo $TARGET_TOMCAT_PATH is OK
else
echo 刪除$TARGET_TOMCAT_PATH is error
fi
else
echo "not found $TARGET_TOMCAT_PATH/webapps/ROOT"
scp $WAR_PATH root@172.16.1.35:$TARGET_TOMCAT_PATH/webapps/ROOT.war && echo WAR包部署完畢。
ssh $HOST /etc/init.d/${MODULE_NAME} restart
fi
####################啟動文件
done
#scp /home/config.properties/ysc/${MODULE_NAME}.js root@172.16.1.35:$TARGET_TOMCAT_PATH/webapps/ROOT/web/js/basePath.js
ssh $HOST /etc/init.d/${MODULE_NAME} restart
Jenkins配置如下修改
修改完成后我們構建演示
提示:這種環境下配置文件都是通過maven build進行控制,也就是通過研發控制配置文件
+
+
+
+
線上環境演示
我們的上線流程如下:
Jenkins配置如下:
+
+
+
+
+ 1.首先測試環境腳本:
[root@tomcat ~]# cat /server/scripts/.upgrade-smscenter.sh
#!/bin/bash
WAR="/jenkins/workspace/portal-smscenter/bxg-sms-center-web/target/*.war"
Path="/data/hub/bxg-smscenter/`date +%Y%m%d`/"
scp_war(){
if [ ! -d $Path ];then
ssh root@file-server mkdir -p $Path
scp $WAR root@file-server:$Path
else
scp $WAR root@file-server:$Path
fi
}
ssh_file(){
ssh root@file-server "/bin/bash /server/script/bxg/bxg-smscenter.sh"
}
scp_war
ssh_file
2.跳板機腳本修改
[root@File-server1 ~]# cat /server/script/bxg/bxg-smscenter.sh#!/bin/bashHOST=online-server2WAR="/data/hub/bxg-smscenter/`date +%Y%m%d`"DIR="/application/smscenter/webapps/ROOT/"function scp_file { if `ssh root@$HOST "[ ! -d $WAR ]"`;then ssh root@$HOST "mkdir -p $WAR" fi scp $WAR/*.war root@$HOST:$WAR/ echo "scp $WAR/*.war root@$HOST:$WAR/"}ssh_deploy(){ ssh root@$HOST "/bin/bash /server/scripts/deploy_smscenter.sh"}scp_filessh_deploy
3.web 服務器腳本
[root@online-server2 ~]# cat /server/scripts/deploy_smscenter.sh
#!/bin/bash
WAR="/data/hub/bxg-smscenter/`date +%Y%m%d`"
OBJECT="/application/smscenter/webapps/ROOT/"
Backup="/data/tomcat/bxg-smscenter-`date +%Y%m%d`"
SCR_D="/application/smscenter/webapps/ROOT"
#config="/data/bak"
backup_tar(){
tar zcvf $Backup.tar.gz $SCR_D/
echo "為了防止意外cp整個項目目錄存放"
cp -a $SCR_D/ $Backup
rm -rf $OBJECT/*
}
cp_war(){
unzip $WAR/*.war -d $SCR_D/
}
cp_config(){
cat $Backup/WEB-INF/classes/application-prod.properties >$SCR_D/WEB-INF/classes/application-prod.properties
/etc/init.d/smscenter restart
}
backup_tar
cp_war
cp_config
[root@online-server2 ~]#
相關文章 企業必會技能 tomcat
+
+
+
+
node 環境上線流程
Jenkins配置如下 [node項目不適用maven,所以可以不用創建maven項目,直接在Jenkins創建普通項目就可以]
1.測試環境腳本
[root@tomcat ~]# cat /server/scripts/mobile/mobile.sh
#!/bin/bash
source /etc/profile
HOST=file-server
BASE_DIR=/server/scripts/mobile/m
url=$1
server=$2
DATE=`date +%Y%m%d`
tar(){
rm -rf $BASE_DIR
[ -d $BASE_DIR ] || mkdir $BASE_DIR
cd $BASE_DIR
echo "##########################################################"
echo "代碼拉取中!!!"
svn co -q $url/ .
echo "##########################################################"
}
cp(){
cd ${BASE_DIR}
/bin/tar -zcvf m_${DATE}.tar.gz ./*
echo "##########################################################"
echo "文件已經打包完成! 正在拷貝中!!!"
echo "##########################################################"
sleep 5
scp m_${DATE}.tar.gz root@$HOST:/data/hub/bxg-mobile/
echo "##########################################################"
echo "文件已經拷貝完成! 正在上傳服務器中!!!"
echo "##########################################################"
ssh root@file-server "/bin/bash /server/script/bxg/bxg-mobile.sh $server"
}
tar
cp
[root@tomcat ~]#
2.跳板機腳本
[root@File-server1 ~]# cat /server/script/bxg/bxg-mobile.sh
#!/bin/bash
HOST=$1
Mobile_tar="/data/hub/bxg-mobile"
DIR="/application/node"
DATE=`date +%Y%m%d`
scp_file(){
if `ssh root@$HOST "[ ! -d $Mobile_tar ]"`;then
ssh root@$HOST "mkdir -p $Mobile_tar"
fi
scp $Mobile_tar/m_${DATE}.tar.gz root@$HOST:$DIR/
sleep 3
echo " "
echo "##########################################################"
echo "File-server 正在拷貝 ${HOST}!!!"
sleep 3
echo "##########################################################"
}
ssh_deploy(){
echo "Hi"
ssh root@$HOST "/bin/bash /server/scripts/bxg/bxg-mobile.sh"
}
scp_file
ssh_deploy
3.web 發布腳本
[root@iZbp11tefvghtcfn5mudgdZ ~]# cat /server/scripts/bxg/bxg-mobile.sh
#!/bin/bash
source /etc/profile
DIR="/application/node"
DATE=`date +%Y%m%d`
Backup="/application/node/m/"
BAK="/data/hub/bxg-mobile"
backup_tar(){
echo "為了防止意外cp整個項目目錄存放"
cp -ar $Backup ${BAK}/mobile_$DATE
echo "online-server 原目錄拷貝備份完成!"
}
cp_war(){
/etc/init.d/mobile stop
#mv $Backup /tmp/m_${DATE} && rm -rf /tmp/m_${DATE}
rm -rf $Backup
mkdir $Backup && cd /application/node/
tar xf m_${DATE}.tar.gz -C $Backup
}
npm_config(){
cd $Backup
cnpm install
npm run build-prod
npm run start-prod &>/var/log/mobile_${DATE}.log &
}
C(){
echo "++++++++++++++++++++++++++++++++++++++++++++++++++++"
curl -I 127.0.0.1:3000
echo "###################################################"
echo "若是200 服務啟動正常! 可以啟動另一臺!"
echo "###################################################"
}
backup_tar
cp_war
npm_config
C
+
+
+
相關文章 Node.js 環境搭建
總結:Jenkins自動化不是運維一個人就可以完成的,需要研發的參與,本文只是給大家展示一下我公司的自動化,我眼里所謂的自動化. 希望大家不喜勿噴,對文章有意見或建議請在評論留言哦~
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。