Jenkins构建CICD

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.

如果启动了访问提示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zrqvdFMJ-1582969247639)(assets/1564326097865.png)]

解决办法在

[root@jenkins-server ~]# cd /usr/local/tomcat/conf/
[root@jenkins-server conf]# vim context.xml  -----添加如下内容:
    <Resources
        cachingAllowed="true"
        cacheMaxSize="100000"
    />

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-THvNF0eG-1582969247642)(assets/1564326085131.png)]

重启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    ---复制这个密码粘贴到上面提示的空格里面。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wmCvxcZC-1582969247647)(assets/1564325665439.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3tqgTjHd-1582969247649)(assets/1564333022739.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IMyfCwfO-1582969247652)(assets/1564333246959.png)]

我的密码设置的为123456

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oUD2VUdE-1582969247653)(assets/1564333308573.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MOJhqu1k-1582969247654)(assets/1564333339797.png)]

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---->勾选--->直接安装

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o37aVsEe-1582969247656)(assets/1564333462537.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kBAUbVPE-1582969247659)(assets/1564333548629.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ClB0mZxP-1582969247663)(assets/1564333661844.png)]

输入插件名后按回车!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A0YueM7S-1582969247665)(assets/1564333727435.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uaf3xxfT-1582969247668)(assets/1564333796321.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o3cUDD2O-1582969247670)(assets/1564333846376.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2xXFKe0y-1582969247673)(assets/1564333976950.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ipDoy8Mj-1582969247675)(assets/1564334089020.png)]

以上所有插件安装完成

开始配置ssh

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1zEPHW7v-1582969247677)(assets/1564334209886.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4kh4Qpr0-1582969247679)(assets/1564334251756.png)]

在最下面:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rCSEM2v9-1582969247681)(assets/1564334451379.png)]

key:指的是jenkins服务器用哪个用户去远程连接程序服务器就是那个用户的私钥。

[root@jenkins-server .ssh]# cat id_rsa
4.添加远程ssh-server:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NEruHarz-1582969247685)(assets/1564334945023.png)]

5.配置jdk,maven命令,全局配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0gQCJQdw-1582969247686)(assets/1564335018840.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wtevjJjY-1582969247687)(assets/1564335123190.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4w30XeCA-1582969247690)(assets/1564335170709.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-661KFm04-1582969247695)(assets/1564335192681.png)]

6.构建发布任务

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h3IkBLhN-1582969247699)(assets/1564335261703.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aGb1PU9C-1582969247701)(assets/1564335284215.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rARcroNp-1582969247701)(assets/1564335352695.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lqa2dpYc-1582969247704)(assets/1564341315628.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T6X3BclL-1582969247705)(assets/1564335657071.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZdRb0ltP-1582969247706)(assets/1564335823407.png)]

7.调用mave命令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uP3UKxVG-1582969247708)(assets/1564336901231.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-92MD1g4H-1582969247710)(assets/1564335918106.png)]

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

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HWqAE85P-1582969247713)(assets/1564336734472.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3JmBEGSC-1582969247717)(assets/1564336761194.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CKJpKnk6-1582969247718)(assets/1564341387433.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SMuGnlcl-1582969247719)(assets/1564341455247.png)]

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

$tomcat_pid
if [ $? -ne 0 ];then
echo “tomcat关闭失败,将会自动退出”
exit 2
fi
fi
cp u p d a t a p a t h / updata_path/ updatapath/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


猜你喜欢

转载自blog.csdn.net/weixin_45641605/article/details/104578275