目录
一、Jenkins
1.1 敏捷开发与持续集成
1.1.1 敏捷开发
敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
1.1.2 持续集成
因为开发部门同时维护多个版本,多个版本的发布,测试需要大量人力,所以要有一个专业的持续集成工具来管理持续重复的工作。
需求(产品部)文档 -->开发-->测试-->上线
1.2 持续集成工具
1.2.1 jenkins和hudson
1) Jenkins是一个持续集成(CI)工具。它可以持续编译,运行你的代码;运行单元测试(UT)或集成测试;将运行结果发送至邮件,或展示成报告。
2) Jenkins起源于Hudson。Hudson在商业软件的路上继续前行,而Jenkins则作为开源软件,从hudson分支出来。 因此现在的jenkins和hudson非常类似,但是随着二者各自的发展,已经有了一些不同。
1.2.2 技术组合
Jenkins 可以整合 GitHub 或 Subversion
Husband 也可以整合 GitHub 或 Subversion
二者既然是同源的工具软件,操作和指导思想就是接近的
1.2.3 部署方式对比
javaEE项目部署方式对比
1)手动化部署
2)自动化部署
“自动化”的具体体现:向版本库提交新的代码后,应用服务器上自动部署,用户或测试人员使用的马上就是最新的应用程序。
搭建上述持续集成环境可以把整个构建、部署过程自动化,很大程度上减轻工作量。
对于程序员的日常开发来说不会造成任何额外负担,自己把代码提交上去之后,服务器上运行的马上就是最新版本,一切都发生在无形中。
1.3 安装Jenkins
Jenkins的war包要安装在tomcat的webapps目中,所以在进行安装之前,需要测试tomcat能否正常使用
开启tomcat后在浏览器进行访问,可以访问到官网即可
#可以只查询进程的第二列
[root@localhost tomcat]# ps -ef|grep tomcat|awk '{print $2}'
52016
52057
1.3.1 下载Jenkins的war包
https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.332.2/?C=N&O=D
或者
https://mirrors.tuna.tsinghua.edu.cn/jenkins/war/2.336/
1.3.2 开启Jenkins
将war放到tomcat下面的webapps里,启动tomcat,并访问 [ ip地址:端口号/jenkins ]
例如:192.168.111.127:8080/jenkins
访问后出现下图
下载的时间会比较长,在等待的时间里可以了解更改一下如何更改jenkins的默认访问地址
但是请不要更改,因为浏览器里的老爷爷还在努力下载插件
访问Jenkins的访问地址的工作目录
vim /root/.jenkins/hudson.model.UpdateCenter.xml
进入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 。
1.4 Jenkins全局安全配置
1.5 使用Jenkins部署项目
1.5.1 准备linux的安装环境
linux中需要安装jdk,tomcat,git,maven;已经安装过jdk和tomcat,所以这里重点讲述如何安装git和maven
1.5.2 安装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
Dependency Updated:
curl.x86_64 0:7.29.0-59.el7_9.1 expat.x86_64 0:2.1.0-15.el7_9 gettext.x86_64 0:0.19.8.1-3.el7 gettext-libs.x86_64 0:0.19.8.1-3.el7
libcurl.x86_64 0:7.29.0-59.el7_9.1 libdb.x86_64 0:5.3.21-25.el7 libdb-utils.x86_64 0:5.3.21-25.el7 libssh2.x86_64 0:1.8.0-4.el7
Complete! #代表安装完成
2、删除已经有的git
删除系统自带的git
yum -y remove git
Dependency Removed:
gettext-devel.x86_64 0:0.19.8.1-3.el7 perl-Git.noarch 0:1.8.3.1-23.el7_8
Complete! #代表卸载成功
3、安装tar包并解压
下载地址:https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.9.3.tar.gz
tar -zxvf git-2.9.3.tar.gz
4、编译
进入解压目录 cd git-2.9.3
make prefix=/usr/lwl/soft/git all
make prefix=/usr/lwl/soft/git install
5、配置环境变量
export GIT_HOME=/usr/lwl/soft/git
export PATH=$GIT_HOME/bin:$PATH
配置完环境变量之后,要让配置文件生效
source /etc/profile
6、查看git版本
[root@localhost git-2.9.3]# git --version
git version 2.9.3
1.5.3 安装maven
1、安装压缩包并解压
下载地址:https://downloads.apache.org/maven/maven-3
tar -zxvf apache-maven-3.6.3-bin.tar.gz
2、配置环境变量
export MAVEN_HOME=/usr/lwl/soft/maven/apache-maven-3.6.3
export PATH=$MAVEN_HOME/bin:$PATH
配置完环境变量,使配置文件生效
source /etc/profile
3、查看maven版本号
mvn -v 或者是 mvn -version
[root@localhost maven]# mvn -v
#版本号是3.6.3
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /usr/lwl/soft/maven/apache-maven-3.6.3
Java version: 1.8.0_362, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b08-1.el7_9.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix"
4、安装插件
mvn help:system
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:26 min
[INFO] Finished at: 2023-02-22T03:32:23-05:00
[INFO] ------------------------------------------------------------------------
1.6 Jenkins的全局工具配置
1.6.1 配置maven的setting.xml
1.6.2 配置jdk的环境
1.6.3 配置git的环境
1.6.4 配置maven的环境
1.6.5 下载maven插件
1.7 创建任务
1、创建任务
2、源码管理
注意:url的地址的配置需要说明
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
ssh-keygen -t rsa -b 4096 -C "qq@qq.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里面
5、生成的公钥放在这个文件中
vim /root/.ssh/id_rsa.pub
3、构建触发器
#每十五分钟构建一次
H/15 * * * *
4、Pre steps
构建之前的步骤
当我们在使用maven进行构建时,忽略对应的测试类,
clean package -U -Dmaven.test.skip=true
5、post steps
BUILD_ID=DONTKILLME
jenkins启动之后会自动退出当前的进程 加上上面一句话表示不自动退出
#脚本内容
BUILD_ID=DONTKILLME
echo "部署的目录和项目名称"
sh /usr/lwl/test/build.sh
echo "success"
对应脚本中的内容是
#! /bin/bash
echo "部署的目录和项目名称"
DIR="/usr/lwl/project"
projectName="demo"
echo "待部署的应用服务器"
server_ips="192.168.111.127"
#所有的参数列表
for server_ip in ${server_ips[@]}
do
echo "进行备份操作"
# 创建文件夹
mkdir -p $DIR/backup/${projectName}
if [ -f "$DIR/${projectName}/${projectName}.jar" ];then
# 备份原来的项目
date=` date +%Y%m%d-%H-%M-%S `
mv $DIR/${projectName}/${projectName}.jar $DIR/backup/${projectName}/${projectName}.jar-${date}
fi
echo "拷贝jar包到目标服务器的目录下"
cp ${WORKSPACE}/target/*.jar $DIR/${projectName}/${projectName}.jar
echo "连接进行发布操作"
echo "开始关闭jar"
l=`ps -ef|grep demo.jar|grep -v grep|awk '{print $2}'`
for i in $l
do
kill -9 $i
done
sleep 5s
echo "启动jar"
nohup java -jar $DIR/demo/demo.jar --server.port=9999 > release_out.log 2>&1 &start_ok=false
done
最后保存配置即可
1.8 项目出现问题
1、如果SpringBoot项目pom文件中打包时打成war包,改成jar包即可
2、配置全局安全时的时候 ,写错了一个字符
1.9 插件下载失败
http://mirror.xmission.com/jenkins/updates/current/update-center.json
如可以,把这个网址粘贴到“Jenkins/插件管理/高级/升级站点” 提交。