Jenkins

持续集成工具

什么是敏捷开发

    敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,**具备可视、可集成和可运行使用**的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。

什么是持续集成(CI)

     因为开发部门同时维护多个版本,多个版本的发布,测试需要大量人力,所以要有一个专业的持续集成工具来管理持续重复的工作。

Jenkins Hudson

1) Jenkins是一个持续集成(CI)工具。它可以持续编译,运行你的代码;运行单元测试(UT)或集成测试;将运行结果发送至邮件,或展示成报告。

2) Jenkins起源于Hudson。Hudson在商业软件的路上继续前行,而Jenkins则作为开源软件,从hudson分支出来。 因此现在的jenkins和hudson非常类似,但是随着二者各自的发展,已经有了一些不同。


  • 技术组合

    Jenkins 可以整合 GitHub 或 Subversion Husband 也可以整合 GitHub 或 Subversion二者既然是同源的工具软件,操作和指导思想就是接近的
  • 部署方式对比

JavaEE 项目部署方式对比

手动部署
在这里插入图片描述

自动化部署
在这里插入图片描述

“自动化”的具体体现:向版本库提交新的代码后,应用服务器上自动部署,用户或测试人员使用的马上就是最新的应用程序。
搭建上述持续集成环境可以把整个构建、部署过程自动化,很大程度上减轻工作量。 对于程序员的日常开发来说不会造成任何额外负担——自己把代码提交上去之后,服务器上运行的马上就是最新版本——一切都发生在无形中。

​ 下面我们讲带领大家一步一步搭建整套持续集成环境,这个操作过程只需要细心认 真即可,没有任何难度。但是需要优秀的你具备以下前置知识:

Linux 基本操作命令和 VIM 编辑器使用

Maven 的项目构建管理

GitHub 或 SVN 使用

安装jenkins

1.下载jekins.war

https://link.zhihu.com/?target=https%3A//mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.222.4/jenkins.war

2.开启jenkins

将war放到tomcat下面的webapps里,启动tomcat,并访问

ip地址:端口号/jenkins

在这里插入图片描述

出现下图,就成功了一小步了
在这里插入图片描述

等待时间比较漫长,如果无法忍受,请更改一下jenkins的默认访问地址

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BT0qDVTq-1624539679394)(C:\Users\86187\Desktop\624\assests\图片[6].png)]

需要你进入jenkins的工作目录,打开hudson.model.UpdateCenter.xml将 url 中的 https://updates.jenkins.io/update-center.json更改为https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json是国内的清华大学的镜像地址。
或者更改为http://updates.jenkins.io/update-center.json,即去掉 https 中的 s 。
然后重启tomcat服务

等待之后会出现如下页面

密码复制之后又是一段漫长的等待,

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dgmIUfuH-1624539679395)(C:\Users\86187\Desktop\624\assests\图片HQRHNLF1.png)]

可任选其一进行插件安装

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-66kybVdN-1624539679397)(C:\Users\86187\Desktop\624\assests\thumbnail[1].png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kE9kxbBs-1624539679398)(C:\Users\86187\Desktop\624\assests\图片IOGOY3LT.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OyAQDSvY-1624539679399)(C:\Users\86187\Desktop\624\assests\thumbnail1.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8yzCudhQ-1624539679400)(C:\Users\86187\Desktop\624\assests\thumbnail[6].png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T7ETfCIv-1624539679401)(C:\Users\86187\Desktop\624\assests\thumbnail[2].png)]

简易版使用jenkins部署项目

将war包部署到tomcat中

​ 下面给出一个简单示例,将已有的war包部署到tomcat中(jenkins与tomcat在同一台主机)

点击Jenkins主页的新建任务

输入任务名称

选择构建一个自由风格的软件项目后点击确定

在构建内添加构建步骤,选择执行shell

输入执行脚本,

#!/bin/sh
tomcat_path=/usr/java/tomcat/tomcat8081
ShutDownTomcat=${tomcat_path}/bin/shutdown.sh
StartTomcat=${tomcat_path}/bin/startup.sh
echo "============删除旧的war包==================="
rm ${tomcat_path}/webapps/docker.war
echo "============删除tomcat下旧的文件夹============="
rm -rf ${tomcat_path}/webapps/docker
echo "======拷贝编译出来的war包到tomcat下======="
cp /usr/java/project/docker.war  ${tomcat_path}/webapps/docker.war
echo "====================关闭tomcat====================="
${ShutDownTomcat}
echo "================sleep 10s========================="
for i in {1..10}
do
        echo $i"s"
        sleep 1s
done
export BUILD_ID=DontKillMe
echo "====================启动tomcat====================="
${StartTomcat}

点击保存

点击左侧的立即构建

部署项目2

准备linux的安装环境

a. 在linux上安装jdk,并配置环境变量

b. 在linux上安装tomcat,并配置环境变量

c.在linux上安装git

1.安装依赖环境

Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。

yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel yum install -y gcc perl-ExtUtils-MakeMaker

2.删除已有的git

yum -y remove git

3.将tar传输到/usr/java/git并解压

tar -zxvf git-2.9.3.tar.gz

4.编译

cd git-2.9.3

make prefix=/usr/java/git all

make prefix=/usr/java/git install

5.将环境变量配置到/etc/profile里面

export GIT_HOME=/usr/java/git

export PATH= G I T H O M E / b i n : GIT_HOME/bin: GITHOME/bin:PATH

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SIgWgLDW-1624539679403)(C:\Users\86187\Desktop\624\assests\thumbnailRXA7PN8O.png)]

source /etc/profile

6.查看git版本

git --version

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mkhNLhbu-1624539679404)(C:\Users\86187\Desktop\624\assests\图片[10].png)]

插件安装失败

这个插件网址是否可以在网页中打开

http://mirror.xmission.com/jenkins/updates/current/update-center.json

如可以,把这个网址粘贴到“Jenkins/插件管理/高级/升级站点” 提交。

原来的地址是:http://updates.jenkins.io/update-center.json

d.在linux安装maven,并配置环境变量。

安装步骤如下:

1.在/usr/java下面创建文件夹maven

mkdir maven

2.将tar包上传到maven文件夹里面并解压

https://downloads.apache.org/maven/maven-3/3.3.9/binaries/

tar -zxvf apache-maven-3.3.9-bin.tar.gz

3.配置环境变量

vi /etc/profile

export MAVEN_HOME=/usr/java/maven/apache-maven-3.3.9

export PATH= M A V E N H O M E / b i n : MAVEN_HOME/bin: MAVENHOME/bin:PATH

使文件生效 source /etc/profile

查看maven版本号

mvn -v

mvn help:system 插件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uZqU9S9U-1624539679405)(C:\Users\86187\Desktop\624\assests\1.1.png)]

e.使用jenkins

安全管理器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zSqcgosC-1624539679406)(C:\Users\86187\Desktop\624\assests\1.2.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5fz91MNt-1624539679407)(C:\Users\86187\Desktop\624\assests\图片[1].png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K1D3fC6b-1624539679408)(C:\Users\86187\Desktop\624\assests\thumbnail[4].png)]

全局工具配置:

安装jdk

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MFfRK3iB-1624539679409)(C:\Users\86187\Desktop\624\assests\thumbnail[3].png)]

配置maven的settings.xml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vj8izAFm-1624539679410)(C:\Users\86187\Desktop\624\assests\1.3.png)]

配置maven的环境

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jovath0d-1624539679411)(C:\Users\86187\Desktop\624\assests\图片[9].png)]

配置git

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Zo9Ja0t-1624539679412)(C:\Users\86187\Desktop\624\assests\thumbnail[4].png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-neITHGfd-1624539679413)(C:\Users\86187\Desktop\624\assests\thumbnail0BB803M3.png)]

创建任务

下载maven的插件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rV2um90q-1624539679414)(C:\Users\86187\Desktop\624\assests\1.4.png)]

创建的是一个maven构建的项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wo5w9mMB-1624539679415)(C:\Users\86187\Desktop\624\assests\thumbnail[5].png)]

配置构建的项目的信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PrUp0YYS-1624539679416)(C:\Users\86187\Desktop\624\assests\图片[4].png)]

注意:url的地址的配置需要说明

ssh-keygen -t rsa -b 4096 -C “your_email@example.com”

这条命令的目的是为了让本地机器ssh登录远程机器上的Gitee账户无需输入密码
1、ssh-keygen:
SSH 为 Secure Shell 的缩写,SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
从客户端来看,SSH提供两种级别的安全验证:
        第一种级别(基于口令的安全验证):只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。
        第二种级别(基于密匙的安全验证)ssh-keygen:需要依靠密匙,你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。但是整个登录的过程可能需要10秒。
        ssh-keygen有很多的参数,比如这里的-t -b -C都是他的一些参数。
2、-t rsa:t是type的缩写
-t即指定密钥的类型,密钥的类型有两种,一种是RSA,一种是DSA:
        RSA:RSA加密算法是一种非对称加密算法,是由三个麻省理工的牛人弄出来的,RSA是他们三个人姓的开头首字母组合。
        DSA:Digital Signature Algorithm (DSA)是Schnorr和ElGamal签名算法的变种。
为了让两个linux机器之间使用ssh不需要用户名和密码。所以采用了数字签名RSA或者DSA来完成这个操作。ssh-keygen默认使用rsa密钥,所以不加-t rsa也行,如果你想生成dsa密钥,就需要加参数-t dsa。
3、-b 4096:b是bit的缩写
-b 指定密钥长度。对于RSA密钥,最小要求768位,默认是2048位。命令中的4096指的是RSA密钥长度为4096位。
DSA密钥必须恰好是1024位(FIPS 186-2 标准的要求)。
4、-C "邮箱":C是comment的缩写
-C表示要提供一个新注释,用于识别这个密钥,所以“”里面不一定非要填邮箱,可以是任何内容,邮箱仅仅是识别用的key
总结:当你创建ssh的时候:-t 表示密钥的类型 ,-b表示密钥的长度,-C 用于识别这个密钥的注释 ,这个注释你可以输入任何内容,很多网站和软件用这个注释作为密钥的名字

去.ssh文件夹里面找到id_rsa.pub文件并将这个文件里面的信息复制到gitee里面

H/5 * * * *

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bB7i3iso-1624539679417)(C:\Users\86187\Desktop\624\assests\thumbnail[7].png)]
​ clean package -U -Dmaven.test.skip=true

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nvlNYkDf-1624539679418)(C:\Users\86187\Desktop\624\assests\图片[5].png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iUo1l6oI-1624539679419)(C:\Users\86187\Desktop\624\assests\图片O0U5JSDR.png)]
BUILD_ID=DONTKILLME

jenkins启动之后会自动退出当前的进程 加上上面一句话表示不自动退出

BUILD_ID=DONTKILLME
echo "部署的目录和项目名称"
sh /usr/java/test/build.sh
echo "success"

对应的build.sh(存放在linux中的/usr/java/test/文件夹下)

#! /bin/bash
echo "部署的目录和项目名称"
DIR="/project"
projectName="demo"
echo "待部署的应用服务器"
server_ips="192.168.159.34"
#所有的参数列表
for server_ip in ${server_ips[@]}
do
echo "进行备份操作"
mkdir -p $DIR/backup/${projectName}
if [ -f "$DIR/${projectName}/${projectName}.jar" ];then
  mv $DIR/${projectName}/${projectName}.jar $DIR/backup/${projectName}/${projectName}-`date "+%Y%m%d_%H%M%S"`.jar
fi
echo "拷贝jar包到目标服务器的目录下"
cp ${WORKSPACE}/target/*.jar /usr/java/test/demo.jar
echo "连接进行发布操作"
#mv /usr/java/test/demo.jar $DIR/backup/${projectName}/${projectName}.jar
echo "开始关闭jar"
sh /usr/java/test/shstopspringboot
sleep 5s
echo "启动jar"
sh /usr/java/test/shspringboot

shstopspringboot(存放到linux的系统中)

#! /bin/bash
nohup java -jar /usr/java/test/demo.jar > release_out.log 2>&1 &start_ok=false

shspringboot(存放到linux系统中)

#! /bin/bash
l=`ps -ef|grep demo.jar|grep -v grep|awk '{print $2}'`
for i in $l
do
 kill -9 $i
done

启动项目的脚本

#! /bin/bash
nohup java -jar /tmp/demo.jar > release_out.log 2>&1 &start_ok=false

关闭项目的脚本

#! /bin/bash
l=`ps -ef|grep demo.jar|grep -v grep|awk '{print $2}'`
for i in $l
do
 kill -9 $i
done

在这里插入图片描述

将这两个脚本添加到刚才的执行文件中

热门文章

暂无图片
编程学习 ·

C语言二分查找详解

二分查找是一种知名度很高的查找算法,在对有序数列进行查找时效率远高于传统的顺序查找。 下面这张动图对比了二者的效率差距。 二分查找的基本思想就是通过把目标数和当前数列的中间数进行比较,从而确定目标数是在中间数的左边还是右边,将查…
暂无图片
编程学习 ·

GMX 命令分类列表

建模和计算操作命令: 1.1 . 创建拓扑与坐标文件 gmx editconf - 编辑模拟盒子以及写入子组(subgroups) gmx protonate - 结构质子化 gmx x2top - 根据坐标生成原始拓扑文件 gmx solvate - 体系溶剂化 gmx insert-molecules - 将分子插入已有空位 gmx genconf - 增加…
暂无图片
编程学习 ·

一文高效回顾研究生课程《数值分析》重点

数值分析这门课的本质就是用离散的已知点去估计整体,就是由黑盒子产生的结果去估计这个黑盒子。在数学里这个黑盒子就是一个函数嘛,这门课会介绍许多方法去利用离散点最大化地逼近这个函数,甚至它的导数、积分,甚至微分方程的解。…
暂无图片
编程学习 ·

在职阿里5年,一个28岁女软测工程师的心声

简单的先说一下,坐标杭州,14届本科毕业,算上年前在阿里巴巴的面试,一共有面试了有6家公司(因为不想请假,因此只是每个晚上去其他公司面试,所以面试的公司比较少) ​ 编辑切换为居中…
暂无图片
编程学习 ·

字符串左旋c语言

目录 题目: 解题思路: 第一步: 第二步: 第三步: 总代码: 题目: 实现一个函数,可以左旋字符串中的k个字符。 例如: ABCD左旋一个字符得到BCDA ABCD左旋两个字符…
暂无图片
编程学习 ·

设计模式--观察者模式笔记

模式的定义与特点 观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式&#xf…
暂无图片
编程学习 ·

睡觉突然身体动不了,什么是睡眠痽痪症

很多朋友可能有这样的体验,睡觉过程中突然意识清醒,身体却动弹不了。这时候感觉非常恐怖,希望旁边有一个人推自己一下。阳光以前也经常会碰到这样的情况,一年有一百多次,那时候很害怕晚上到来,睡觉了就会出…
暂无图片
编程学习 ·

深入理解C++智能指针——浅析MSVC源码

文章目录unique_ptrshared_ptr 与 weak_ptrstd::bad_weak_ptr 异常std::enable_shared_from_thisunique_ptr unique_ptr 是一个只移型别(move-only type,只移型别还有std::mutex等)。 结合一下工厂模式,看看其基本用法&#xff…
暂无图片
编程学习 ·

@TableField(exist = false)

TableField(exist false) //申明此字段不在数据库存在,但代码中需要用到它,通知Mybatis-plus在做写库操作是忽略它。,.
暂无图片
编程学习 ·

Java Web day15

第十二章文件上传和下载 一、如何实现文件上传 要实现Web开发中的文件上传功能,通常需要完成两步操作:一.是在Web页面中添加上传输入项;二是在Servlet中读取上传文件的数据,并保存到本地硬盘中。 需要使用一个Apache组织提供一个…
暂无图片
编程学习 ·

【51nod 2478】【单调栈】【前缀和】小b接水

小b接水题目解题思路Code51nod 2478 小b接水 题目 输入样例 12 0 1 0 2 1 0 1 3 2 1 2 1输出样例 6解题思路 可以发现最后能拦住水的都是向两边递减高度(?) 不管两个高积木之间的的积木是怎样乱七八糟的高度,最后能用来装水的…
暂无图片
编程学习 ·

花了大半天写了一个UVC扩展单元调试工具

基于DIRECTSHOW 实现的,用的是MFC VS2019. 详见:http://www.usbzh.com/article/detail-761.html 获取方法 加QQ群:952873936,然后在群文件\USB调试工具&测试软件\UVCXU-V1.0(UVC扩展单元调试工具-USB中文网官方版).exe USB中文网 USB中文…
暂无图片
编程学习 ·

贪心(一):区间问题、Huffman树

区间问题 例题一:区间选点 给定 N 个闭区间 [ai,bi]请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。 输出选择的点的最小数量。 位于区间端点上的点也算作区间内。 输入格式 第一行包含整数 N,表示区间数。 接下来 …
暂无图片
编程学习 ·

C语言练习实例——费氏数列

目录 题目 解法 输出结果 题目 Fibonacci为1200年代的欧洲数学家,在他的着作中曾经提到:「若有一只免子每个月生一只小免子,一个月后小免子也开始生产。起初只有一只免子,一个月后就有两只免子,二个月后有三只免子…
暂无图片
编程学习 ·

Android开发(2): Android 资源

个人笔记整理 Android 资源 Android中的资源,一般分为两类: 系统内置资源:Android SDK中所提供的已经定义好的资源,用户可以直接拿来使用。 用户自定义资源:用户自己定义或引入的,只适用于当前应用的资源…
暂无图片
编程学习 ·

零基础如何在短时间内拿到算法offer

​算法工程师是利用算法处理事物的职业 算法(Algorithm)是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。 如果一个算法有缺陷,或不适合于某个问题,执…
暂无图片
编程学习 ·

人工智能:知识图谱实战总结

人工智能python,NLP,知识图谱,机器学习,深度学习人工智能:知识图谱实战前言一、实体建模工具Protegepython,NLP,知识图谱,机器学习,深度学习 人工智能:知识图…
暂无图片
编程学习 ·

【无标题】

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…