目录
一、Jenkins
1.1 敏捷开发与持续集成
1.1.1 敏捷开发
1.1.2 持续集成
1.2 持续集成工具
1.2.1 jenkins和hudson
1.2.2 技术组合
1.2.3 部署方式对比
1.3 安装Jenkins
1.3.1 下载Jenkins的war包
1.3.2 开启Jenkins
1.4 Jenkins全局安全配置
1.5 使用Jenkins部署项目
1.5.1 准备linux的安装环境
1.5.2 安装git
1.5.3 安装maven
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.8 项目出现问题
1.9 插件下载失败
一、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/插件管理/高级/升级站点” 提交。
原来的地址是:http://updates.jenkins.io/update-center.json