Jenkins構建CI/CD
CI/CD是什麼?
CI(Continuous integration,中文意思是持續集成)是一種軟件開發時間。持續集成強調開發人員提交了新代碼之後,立刻進行構建、測試。根據測試結果,我們可以確定新代碼和原有代碼能否正確地集成在一起。
CD(Continuous Delivery, 中文意思持續交付)是在持續集成的基礎上,將集成後的代碼部署到更貼近真實運行環境中。比如,我們完成測試後,可以把代碼部署到連接數據庫的環境中更多的測試。如果代碼沒有問題,可以繼續手動部署到生產環境。
持續集成/持續發佈—開發(git) -->git主庫–>jenkins(git+jdk+tomcat+maven打包+測試)–>發佈到tomcat服務器
一、jenkins介紹
Jenkins是一個開源的、提供友好操作界面的持續集成(CI)工具 ,幫我們將代碼進行統一的編譯打包、還可以放到tomcat容器中進行發佈。
我們通過配置,將以前:編譯、打包、上傳、部署到Tomcat中的過程交由Jenkins,Jenkins通過給定的代碼地址URL,將代碼拉取到其“宿主服務器”(Jenkins的安裝位置),進行編譯、打包和發佈到web容器中。
1、Jenkins概述
是一個開源的、提供友好操作界面的持續集成(CI)工具,主要用於持續、自動的構建的一些定時執行的任務。Jenkins用Java語言編寫,可在Tomcat等流行的容器中運行,也可獨立運行。
jenkins通常與版本管理工具(SCM)、構建工具結合使用;常用的版本控制工具有SVN、GIT。jenkins構建工具有Maven、Ant、Gradle。
2、Jenkins目標
提高開發效率
過程控制
3、Jenkins特性
1.易於安裝 # 不需要安裝、不需要數據庫,只需通過java -jar jenkins.war或部署到一個java容器中
2.易於配置 #所有的配置都可能通過jenkins提供的web界面完成,當然如果你喜歡,也可以通過手動修改xml文件進行配置
3.文件識別 # jenkins能跟蹤每次構建生成哪些jar包以及使用哪個版本的jar包
4.分佈式構建 # 支持Jenkins能夠讓多臺計算機一起構建/測試。
5.任務(Job)和構建(build) #任務:(Job)是Jenkins的一個執行計劃,是一系列操作的集合。構建:是Jenkins的任務的一次運行。
6.插件支持 # jenkins可以通過第三方插件擴展,也可以根據團隊需要開發插件
工作流程圖:
測試環境中:
1.開發者會將代碼上傳到版本庫中。
2.jenkins通過配置版本庫的連接地址,獲取到源代碼。
3.jenkins獲取到源代碼之後通過參數化構建(或者觸發器)開始編譯打包。
4.jenkins通過調用maven(Ant或者Gradle)命令實現編譯打包過程。
5.生成的war包通過ssh插件上傳到遠程tomcat服務器中通過shell腳本自動發佈項目。
生產環境:
測試環境將項目測試沒問題後,將項目推送到線上正式環境。
1.可以選擇手動。
2.也可以通過調用腳本推送過去。
二、部署Jenkins實戰
1、準備環境:
兩臺機器
git-server ----https://github.com/bingyue/easy-springmvc-maven
jenkins-server —192.168.246.212—最好是3個G以上
java-server -----192.168.246.210
https://github.com/bingyue/easy-springmvc-maven
1.部署jenkins服務器
安裝git客戶端:
[root@jenkins-server ~]# yum install -y git #安裝git客戶端
[root@jenkins-server ~]# ssh-keygen
[root@jenkins-server ~]# ssh-copy-id -i [email protected] #拷貝到後端java服務器
開始部署jenkins:
1.上傳jdk
[root@jenkins-server ~]# tar xzf jdk-8u191-linux-x64.tar.gz -C /usr/local/
[root@jenkins-server ~]# cd /usr/local/
[root@jenkins-server local]# mv jdk1.8.0_191/ java
2.安裝tomcat
[root@jenkins-server ~]# wget http://us.mirrors.quenda.co/apache/tomcat/tomcat-8/v8.5.51/bin/apache-tomcat-8.5.51.tar.gz
[root@jenkins-server ~]# tar xzf apache-tomcat-8.5.51.tar.gz -C /usr/local/
[root@jenkins-server ~]# cd /usr/local/
[root@jenkins-server local]# mv apache-tomcat-8.5.51/ tomcat
3.安裝maven
[root@jenkins-server ~]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
[root@jenkins-server ~]# tar xzf apache-maven-3.5.4-bin.tar.gz -C /usr/local/java
[root@jenkins-server ~]# cd /usr/local/java
[root@jenkins-server java]# mv apache-maven-3.5.4/ maven
設置變量:
[root@jenkins-server ~]# 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
[root@jenkins-server ~]# source /etc/profile
驗證:
[root@jenkins-server ~]# java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
[root@jenkins-server ~]# mvn -v
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-18T02:33:14+08:00)
Maven home: /usr/local/java/maven
Java version: 1.8.0_191, vendor: Oracle Corporation, runtime: /usr/local/java/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-693.el7.x86_64", arch: "amd64", family: "unix"
下載jenkins的安裝包:
安裝jenkins:2.196 ----通過官網直接下載war包。
官網:http://updates.jenkins-ci.org/download/war/
[root@jenkins-server ~]# wget http://updates.jenkins-ci.org/download/war/2.196/jenkins.war
部署jenkins
[root@jenkins-server ~]# cd /usr/local/tomcat/webapps/
[root@jenkins-server webapps]# rm -rf *
[root@jenkins-server webapps]# cp /root/jenkins.war .
[root@jenkins-server webapps]# ../bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/java
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
如果啓動了訪問提示
解決辦法在
[root@jenkins-server ~]# cd /usr/local/tomcat/conf/
[root@jenkins-server conf]# vim context.xml -----添加如下內容:
<Resources
cachingAllowed="true"
cacheMaxSize="100000"
/>
重啓tomcat
2.如果還是不行:
[root@jenkins ~]# cd .jenkins/updates/ 到jenkins的工作目錄下
[root@jenkins updates]# vim default.json
把 "connectionCheckUrl":"http://www.google.com/" 改爲 "connectionCheckUrl":"http://www.baidu.com/"
3.要是還是不行:
需要你進入jenkins的工作目錄,打開-----hudson.model.UpdateCenter.xml
把http://updates.jenkins-ci.org/update-center.json
改成
http://mirror.xmission.com/jenkins/updates/update-center.json
每次改完記得重啓!
使用運行war的形式安裝jenkins,因爲偉大的牆出現,“該jenkins實例似乎已離線” 問題:
解決辦法:
需要你進入jenkins的工作目錄,打開-----hudson.model.UpdateCenter.xml將 url 中的 https://updates.jenkins.io/update-center.json 更改爲http://updates.jenkins.io/update-center.json,即去掉 https 中的 s 。
或者更改爲https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
是國內的清華大學的鏡像地址。
然後重啓tomcat
========================================================================
2.訪問界面: —需要多等一會
http://192.168.246.212:8080/jenkins
[root@jenkins-server ~]# cat /opt/jenkins/secrets/initialAdminPassword
b36b8b04c5b84e659701304dfe848999 ---複製這個密碼粘貼到上面提示的空格里面。
我的密碼設置的爲123456
3.安裝插件
安裝插件:
所需的插件:
• Maven插件 Maven Integration plugin
• 發佈插件 Deploy to container Plugin
需要安裝插件如下:
=======================================================
安裝插件Deploy to container ---支持自動化代碼部署到tomcat容器
GIT pligin 可能已經安裝
Maven Integration :jenkins利用Maven編譯,打包所需插件
Publish Over SSH :通過ssh連接
ssh 插件
安裝過程:
系統管理--->插件管理---->可選插件--->過濾Deploy to container---->勾選--->直接安裝
輸入插件名後按回車!
以上所有插件安裝完成
開始配置ssh
在最下面:
key:指的是jenkins服務器用哪個用戶去遠程連接程序服務器就是那個用戶的私鑰。
[root@jenkins-server .ssh]# cat id_rsa
4.添加遠程ssh-server:
5.配置jdk,maven命令,全局配置
6.構建發佈任務
7.調用mave命令
8.部署java服務器,做jenkins打包上線
[root@java-server ~]# mkdir -p /data/application
上傳jdk
[root@java-server ~]# tar xzf jdk-8u191-linux-x64.tar.gz -C /usr/local/
[root@java-server ~]# cd /usr/local/
[root@java-server local]# mv jdk1.8.0_191/ java
下載tomcat
[root@java-server ~]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.42/bin/apache-tomcat-8.5.42.tar.gz
[root@java-server ~]# tar xzf apache-tomcat-8.5.42.tar.gz -C /data/application/
[root@java-server ~]# cd /data/application/
[root@java-server application]# mv apache-tomcat-8.5.42/ tomcat
設置環境變量
[root@java-server ~]# vim /etc/profile
export JAVA_HOME=/usr/local/java
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
export TOMCAT_HOME=/data/application/tomcat
[root@java-server ~]# source /etc/profile
測試:
[root@java-server ~]# java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
刪除tomcat默認發佈目錄下面的內容:
[root@java-server ~]# rm -rf /data/application/tomcat/webapps/*
[root@java-server ~]# cd /data/application/tomcat/webapps/
[root@java-server webapps]# ls
創建目錄和腳本:
[root@java-server ~]# mkdir /opt/script #創建腳本目錄
[root@java-server ~]# vim app-jenkins.sh #創建腳本
腳本內容在後面
[root@java-server ~]# chmod +x app-jenkins.sh #添加執行權限
[root@java-server ~]# mv app-jenkins.sh /opt/script/
9.回到jenkins頁面開始構建任務
10.登陸java-server服務器查看:
腳本內容:
[root@java-server script]# cat app-jenkins.sh
#!/usr/bin/bash
#本腳本適用於jenkins持續集成,實現備份war包到代碼更新上線!使用時請注意全局變量。
#================
#Defining variables
export JAVA_HOME=/usr/local/java
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