摘要php
jenkins自動化部署項目,經過jenkins 部署來節省運維時間,不須要手動cp上線及版本發佈html
Jenkins
java
Jenkins 自動化部署上線node
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/profileexport JAVA_HOME=/usr/local/jdkexport CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexport 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 1fiechoecho 部署參數:${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_ARRdo 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=$YSCHOST=root@172.16.1.35#校驗部署參數,不能爲空if [ -z "$DEPLOY_TARGET_TOMCAT" ]then echo echo 部署參數爲空,部署失敗! echo "#####################################################################" exit 1fiechoecho 部署參數:${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_ARRdo 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/bashWAR="/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:$Pathelse scp $WAR root@file-server:$Pathfi}ssh_file(){ ssh root@file-server "/bin/bash /server/script/bxg/bxg-smscenter.sh"}scp_warssh_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/bashWAR="/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_tarcp_warcp_config[root@online-server2 ~]#
相關文章 企業必會技能 tomcat
+
+
+
+
node 環境上線流程
Jenkins配置以下 [node項目不適用maven,因此能夠不用建立maven項目,直接在Jenkins建立普通項目就能夠]
1.測試環境腳本
[root@tomcat ~]# cat /server/scripts/mobile/mobile.sh#!/bin/bashsource /etc/profileHOST=file-serverBASE_DIR=/server/scripts/mobile/murl=$1server=$2DATE=`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"}tarcp[root@tomcat ~]#
2.跳板機腳本
[root@File-server1 ~]# cat /server/script/bxg/bxg-mobile.sh#!/bin/bashHOST=$1Mobile_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_filessh_deploy
3.web 發佈腳本
[root@iZbp11tefvghtcfn5mudgdZ ~]# cat /server/scripts/bxg/bxg-mobile.sh#!/bin/bashsource /etc/profileDIR="/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_tarcp_warnpm_configC
+
+
+
相關文章 Node.js 環境搭建
總結:Jenkins自動化不是運維一我的就能夠完成的,須要研發的參與,本文只是給你們展現一下我公司的自動化,我眼裏所謂的自動化. 但願你們不喜勿噴,對文章有意見或建議請在評論留言哦~