1. 程式人生 > 實用技巧 >Jenkins構建CI/CD —— 部署應用Jenkins+Github+Tomcat實戰

Jenkins構建CI/CD —— 部署應用Jenkins+Github+Tomcat實戰

一、什麼是CI/CD?

持續整合/持續釋出---開發(git) -->git主庫-->jenkins(git+jdk+tomcat+maven打包+測試)-->釋出到tomcat伺服器

(1)持續整合 ——從 git主庫拉去程式碼

開發人員用git命令把寫好的原始碼釋出到 git主庫(git gitlab github svn)

(2)持續釋出 —— jenkins伺服器釋出 .war 包到 tomcat

jenkins是由 java開發的,所以執行 jenkins需要安裝 tomcat ,tomcat以來 jdk ,jdk 提供了(JVM+JRE+JAVA庫)。

編譯打包用到 maven生成 .war 包,釋出到tomcat。 故 jenkins伺服器要安裝 jdk 和 tomcat 。

(3)對誰免密

jenkins伺服器需要做 ssh-keygen免密登入 ,把公鑰傳給git主庫(git gitlab github svn)和tomcat 。

二、為什麼要 CI / CD 方法——節約成本

(1)軟體開發的連續方法基於自動執行指令碼,以最大限度的減少在開發應用程式時引入錯誤的可能性。

從程式碼的開發到部署,它們需要較少的人為干預甚至根本不需要干預。

他涉及在每次小迭代中不斷構建、測試和部署程式碼更改,從而減少基於有缺陷的或者失敗的先前的版本開發新版本的機會。

(2)這種方法有三種主要方法,每種方法都根據最適合您的策略進行應用。

持續整合(Continuous Integration, CI): 程式碼合併,構建,部署,測試都在一起,不斷地執行這個過程,並對結果反饋。

持續部署(Continuous Deployment, CD): 部署到測試環境、預生產環境/灰度環境、生產環境。 

持續交付(Continuous Delivery, CD): 將最終產品釋出到生產環境、給使用者使用。

三、jenkins簡介

jenkins是幫我們將程式碼進行統一的編譯打包,放到tomcat容器中進行釋出。

我們通過配置,將以前:編譯、打包、上傳、部署到tomcat中的過程交由 jenkins,

jenkins通過給定的程式碼地址 URL ,將程式碼拉取到其“”“宿主伺服器” ( jenkins的安裝位置),

jenkins再進行編譯、打包、釋出到 web容器。

1、Jenkins概述

是一個開源的、提供友好操作介面的持續整合(CI)工具,主要用於持續、自動的構建的一些定時執行的任務。Jenkins用Java語言編寫,可在Tomcat等流行的容器中執行,也可獨立執行。

jenkins通常與版本管理工具(SCM)、構建工具結合使用;常用的版本控制工具有SVN、GIT。jenkins構建工具有Maven、Ant、Gradle 。

2、Jenkins目標

① 持續、自動地構建/測試軟體專案。

② 監控軟體開放流程,快速問題定位及處理,提高開發效率。

3、Jenkins特性

① 開源的java語言開發持續整合工具,支援CI,CD。
② 易於安裝部署配置:可通過yum安裝,或下載war包以及通過docker容器等快速實現安裝部署,可方便web介面配置管理。
③ 訊息通知及測試報告:整合RSS/E-mail通過RSS釋出構建結果或當構建完成時通過e-mail通知,生成JUnit/TestNG測試報告。
④ 分散式構建:支援Jenkins能夠讓多臺計算機一起構建/測試。
⑤ 檔案識別:Jenkins能夠跟蹤哪次構建生成哪些jar,哪次構建使用哪個版本的jar等。
⑥ 豐富的外掛支援:支援擴充套件外掛,你可以開發適合自己團隊使用的工具,如git,svn,maven,docker等。

工作流程圖:

測試環境中:
1.開發者會將程式碼上傳到版本庫中。
2.jenkins通過配置版本庫的連線地址,獲取到原始碼。
3.jenkins獲取到原始碼之後通過引數化構建(或者觸發器)開始編譯打包。
4.jenkins通過呼叫maven(Ant或者Gradle)命令實現編譯打包過程。
5.生成的war包通過ssh外掛上傳到遠端tomcat伺服器中通過shell指令碼自動釋出專案。

生產環境:
測試環境將專案測試沒問題後,將專案推送到線上正式環境。
1.可以選擇手動。
2.也可以通過呼叫指令碼推送過去。

4、產品釋出流程

產品設計成型 -> 開發人員開發程式碼 -> 測試人員測試功能 -> 運維人員釋出上線

持續整合(Continuous integration,簡稱CI)

持續部署(continuous deployment)

持續交付(Continuous delivery)

四、部署應用Jenkins+Github+Tomcat實戰

1、準備環境:

兩臺機器

git-server ----https://github.com/bingyue/easy-springmvc-maven

jenkins-server ---10.8.162.30---最好是3個G以上

java-server -----10.8.162.67---1G即可

2、部署jenkins伺服器

安裝git客戶端:
[[email protected] ~]# yum install -y git #安裝git客戶端
[[email protected] ~]# ssh-keygen
[[email protected] ~]# ssh-copy-id -i [email protected] #拷貝到後端java伺服器


開始部署jenkins:
1、上傳jdk
[[email protected] ~]# tar xzf jdk-8u191-linux-x64.tar.gz -C /usr/local/
[[email protected] ~]# cd /usr/local/
[[email protected] local]# mv jdk1.8.0_191/ java

2、安裝tomcat
[[email protected] ~]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.42/bin/apache-tomcat-8.5.42.tar.gz
[[email protected] ~]# tar xzf apache-tomcat-8.5.42.tar.gz -C /usr/local/
[[email protected] ~]# cd /usr/local/
[[email protected] local]# mv apache-tomcat-8.5.42/ tomcat

3、安裝maven
[[email protected] ~]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
[[email protected] ~]# tar xzf apache-maven-3.5.4-bin.tar.gz -C /usr/local/java
[[email protected] ~]# cd /usr/local/java
[[email protected] java]# mv apache-maven-3.5.4/ maven

4、設定變數:
[[email protected] ~]# vim /etc/profile
JAVA_HOME=/usr/local/java
MAVEN_HOME=/usr/local/java/maven
PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL JAVA_HOME MAVEN_HOME
[[email protected] ~]# source /etc/profile

5、驗證:
[[email protected] ~]# java -version
java version "1.8.0_191"

6、下載jenkins的安裝包:
安裝jenkins:2.196 ----通過官網直接下載war包。
官網:http://updates.jenkins-ci.org/download/war/
[[email protected] ~]# wget http://updates.jenkins-ci.org/download/war/2.196/jenkins.war

7、部署jenkins
[[email protected] ~]# cd /usr/local/tomcat/webapps/
[[email protected] webapps]# rm -rf *
[[email protected] webapps]# cp /root/jenkins.war .
[[email protected] webapps]# ../bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Tomcat started.

3、訪問介面: ---需要多等一會

http://10.8.162.30:8080/jenkins

4、jenkins應用

A、使用前的配置

(1)安裝推薦外掛

不管是否全是綠色對勾 ,都點選繼續。

(2)建立第一個管理員使用者,儲存並完成。

(3)配置例項預設,儲存並完成。

(4)jenkins已就緒,開始使用 jenkins .

B、開始使用,安裝外掛

安裝過程:
系統管理--->外掛管理---->可選外掛--->過濾外掛---->勾選--->直接安裝

本實驗需要安裝的外掛有

(1)Deploy to container

(2)Maven integration

(3)Publish Over SSH

(4)SSH 、SSH Agent 、 SSH2 Easy 、 SSH Pipcline

C、以上所有外掛安裝完成,開始配置ssh

D、郵箱

E、最上面 ——jenkins家目錄

F、最下面 ——jenkins私鑰配置到 jenkins伺服器上

G、配置jdk,maven命令,全域性配置

H、構建釋出任務

5、部署 java 伺服器,做 jenkins 打包上線

[[email protected] ~]# mkdir -p /data/application

上傳jdk
[[email protected] ~]# tar xzf jdk-8u191-linux-x64.tar.gz -C /usr/local/
[[email protected] ~]# cd /usr/local/
[[email protected] local]# mv jdk1.8.0_191/ java

下載tomcat
[[email protected] ~]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.42/bin/apache-tomcat-8.5.42.tar.gz
[[email protected] ~]# tar xzf apache-tomcat-8.5.42.tar.gz -C /data/application/
[[email protected] ~]# cd /data/application/
[[email protected] application]# mv apache-tomcat-8.5.42/ tomcat

設定環境變數
[[email protected] ~]# vim /etc/profile
JAVA_HOME=/usr/local/java
PATH=$JAVA_HOME/bin:$PATH
[[email protected] ~]# source /etc/profile

測試:
[[email protected] ~]# java -version
java version "1.8.0_191"

刪除tomcat預設釋出目錄下面的內容:
[[email protected] ~]# rm -rf /data/application/tomcat/webapps/*
[[email protected] ~]# cd /data/application/tomcat/webapps/
[[email protected] webapps]# ls

建立目錄和指令碼:
[[email protected] ~]# mkdir /opt/script #建立指令碼目錄
[[email protected] ~]# vim /opt/script/app-jenkins.sh #建立指令碼

指令碼內容:
#!/usr/bin/bash
#本指令碼適用於jenkins持續整合,實現備份war包到程式碼更新上線!使用時請注意全域性變數。
#================
#Defining variables
export JAVA_HOME=/usr/local/java
PATH=$PATH:$JAVA_HOME/bin
webapp_path="/data/application/tomcat/webapps"
tomcat_run="/data/application/tomcat/bin"
updata_path="/data/update/`date +%F-%T`"
backup_path="/data/backup/`date +%F-%T`"
tomcat_pid=`ps -ef | grep tomcat | grep -v grep | awk '{print $2}'`
files_dir="easy-springmvc-maven"
files="easy-springmvc-maven.war"
job_path="/root/upload"

#Preparation environment
echo "Creating related directory"
mkdir -p $updata_path
mkdir -p $backup_path

echo "Move the uploaded war package to the update directory"
mv $job_path/$files $updata_path

echo "========================================================="
cd /opt
echo "Backing up java project"
if [ -f $webapp_path/$files ];then
tar czf $backup_path/`date +%F-%H`.tar.gz $webapp_path
if [ $? -ne 0 ];then
echo "打包失敗,自動退出"
exit 1
else
echo "Checking if tomcat is started"
if [ -n "$tomcat_pid" ];then
kill -9 $tomcat_pid
if [ $? -ne 0 ];then
echo "tomcat關閉失敗,將會自動退出"
exit 2
fi
fi
cd $webapp_path
rm -rf $files && rm -rf $files_dir
cp $updata_path/$files $webapp_path
cd /opt
$tomcat_run/startup.sh
sleep 5
echo "顯示tomcat的pid"
echo "`ps -ef | grep tomcat | grep -v grep | awk '{print $2}'`"
echo "tomcat startup"
echo "請手動檢視tomcat日誌。指令碼將會自動退出"
fi
else
echo "Checking if tomcat is started"
if [ -n "$tomcat_pid" ];then
kill -9 $tomcat_pid
if [ $? -ne 0 ];then
echo "tomcat關閉失敗,將會自動退出"
exit 2
fi
fi
cp $updata_path/$files $webapp_path
$tomcat_run/startup.sh
sleep 5
echo "顯示tomcat的pid"
echo "`ps -ef | grep tomcat | grep -v grep | awk '{print $2}'`"
echo "tomcat startup"
echo "請手動檢視tomcat日誌。指令碼將會自動退出"
fi

[[email protected] ~]# chmod +x /opt/script/app-jenkins.sh #新增執行許可權

(2)回到jenkins頁面開始構建任務

(3)登陸java-server伺服器檢視: