一、什么是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-****** 免密登录 ,把公钥传给 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等。

工作流程图:

Jenkins构建CI/CD —— 部署应用Jenkins+Github+Tomcat实战

测试环境中:
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构建CI/CD —— 部署应用Jenkins+Github+Tomcat实战

四、部署应用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-******
[[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

Jenkins构建CI/CD —— 部署应用Jenkins+Github+Tomcat实战

4、jenkins应用

A、使用前的配置

(1)安装推荐插件

不管是否全是 绿色对勾 ,都点击继续。

(2)创建第一个管理员用户,保存并完成。

(3)配置实例默认,保存并完成。

(4)jenkins 已就绪,开始使用 jenkins .

B、开始使用,安装插件

安装过程:
     系统管理--->插件管理---->可选插件--->过滤插件---->勾选--->直接安装  

Jenkins构建CI/CD —— 部署应用Jenkins+Github+Tomcat实战

Jenkins构建CI/CD —— 部署应用Jenkins+Github+Tomcat实战

本实验需要安装的插件有

(1)Deploy  to  container

(2)Maven integration

(3)Publish Over  SSH

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

C、以上所有插件安装完成,开始配置ssh

Jenkins构建CI/CD —— 部署应用Jenkins+Github+Tomcat实战

D、邮箱

Jenkins构建CI/CD —— 部署应用Jenkins+Github+Tomcat实战

Jenkins构建CI/CD —— 部署应用Jenkins+Github+Tomcat实战

Jenkins构建CI/CD —— 部署应用Jenkins+Github+Tomcat实战

E、最上面 —— jenkins 家目录

Jenkins构建CI/CD —— 部署应用Jenkins+Github+Tomcat实战

F、最下面 —— jenkins 私钥配置到  jenkins 服务器上

Jenkins构建CI/CD —— 部署应用Jenkins+Github+Tomcat实战

Jenkins构建CI/CD —— 部署应用Jenkins+Github+Tomcat实战

Jenkins构建CI/CD —— 部署应用Jenkins+Github+Tomcat实战

G、配置jdk,maven命令,全局配置

Jenkins构建CI/CD —— 部署应用Jenkins+Github+Tomcat实战

Jenkins构建CI/CD —— 部署应用Jenkins+Github+Tomcat实战

H、构建发布任务

Jenkins构建CI/CD —— 部署应用Jenkins+Github+Tomcat实战

Jenkins构建CI/CD —— 部署应用Jenkins+Github+Tomcat实战

Jenkins构建CI/CD —— 部署应用Jenkins+Github+Tomcat实战

Jenkins构建CI/CD —— 部署应用Jenkins+Github+Tomcat实战

Jenkins构建CI/CD —— 部署应用Jenkins+Github+Tomcat实战

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页面开始构建任务

Jenkins构建CI/CD —— 部署应用Jenkins+Github+Tomcat实战

 

Jenkins构建CI/CD —— 部署应用Jenkins+Github+Tomcat实战

Jenkins构建CI/CD —— 部署应用Jenkins+Github+Tomcat实战

(3)登陆java-server服务器查看:

Jenkins构建CI/CD —— 部署应用Jenkins+Github+Tomcat实战

Jenkins构建CI/CD —— 部署应用Jenkins+Github+Tomcat实战

 

 

相关文章: