目录
8.3 修改maven配置文件(本地仓库和阿里云远程仓库地址)
1. 什么是Jenkins?
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。
2. 为什么使用Jenkins?
总的来说就是当你在idea写好代码上传到git上,jenkins帮你拉取文件,并且可以部署到Linux上,以便于测试。
3. 安装Jenkins
必须在linux系统上安装了jdk,而且jdk的版本是[11~20)之间。如果你的jdk版本是8的话,前面一切正常,但到了后面安装插件就会报错。
3.1 下载相关文件
http://mirrors.jenkins.io/war-stable/latest/jenkins.war
3.2 解压Linux版本的JDK
tar -zxvf xxxx.tar.gz
3.3 配置JDK环境
- vi /etc/profile
- 在文件的最后加上:export JAVA_HOME=/usr/app/jdk17
export PATH=$JAVA_HOME/bin:$PATH - 环境配置好后:source /etc/profile。
先运行yum install fontconfig:fontconfig 是一个灵活的字体配置和选择系统,用于定制字体查找规则并提高字体的可访问性和可读性。
3.4 运行jenkins.war
nohup java -jar /usr/app/jenkins.war --httpPort=8777 >/usr/app/jenkins.log 2>&1 &
上面命令是在Linux系统中以后台方式启动Java应用程序(具体来说是Jenkins)而不占用终端会话。
- nohup:这个命令意味着“不挂断”。它使得启动的进程不会因为终端会话结束而被终止。
- java -jar /usr/app/jenkins.war:这部分启动了Java应用程序。java -jar是运行Java Web应用程序的标准方式,/usr/app/jenkins.war是Jenkins应用的WAR文件路径。
- --httpPort=8777:这是传递给Jenkins应用的一个参数,指定了HTTP服务监听的端口为8777。
- >/usr/app/jenkins.log:这将标准输出重定向到/usr/app/jenkins.log文件,记录Jenkins运行时的所有输出信息。
- 2>&1:这将标准错误输出(通常为文件描述符2)重定向到与标准输出相同的地方(这里是指向jenkins.log)。这样做的目的是将所有输出(包括错误信息)都合并到同一个日志文件中。
- &:最后的符号&表示命令应该在后台运行,立即返回控制台,使用户可以继续执行其他命令,而Jenkins应用则在后台持续运行。
3.5 安装完成
查看日志:
tail -100 jenkins.log
出现下面这种,说明安装完成。
4. 访问Jenkins
即可访问jenkins安装的Linux的地址:8777:
运行得到管理员密码:
等待安装所有需要的依赖:
等待进度条满:
创建用户:
5. 修改密码
在页面下方有password。
6. 集成JDK
找到Tools:
添加JDK:
7. Jenkins集成Git
因为jenkins自动从git远程仓库拉取代码,所以要在jenkins所在的服务器上安装git。
yum install -y git
再找到Tools:
找到Git:
如果你的Linux安装了git这里就不会报红了。
7.1 使用Jenkins拉取Git仓库中的代码
创建Item:
完成新建:
创建完毕后,找到源码管理:
输入你的仓库地址:
添加jenkins:
填写好后,点至保存:
现在jenkins无法自动拉取代码。(当仓库中的代码发生改变时无法自动拉取)
结果:
8. Jenkins集成Maven
由于Jenkins本身不能对代码进行打包,所以我们需要集成maven,而且我们的项目几乎100%都是maven构建的项目。
8.1 在Jenkins所在的服务器安装Maven
8.2 配置环境变量
- vi /etc/profile
- 在文件的最后加上:export MAVEN_HOME=安装路径
export PATH=$MAVEN_HOME/bin:$PATH - 环境配置好后:source /etc/profile
查看:
8.3 修改maven配置文件(本地仓库和阿里云远程仓库地址)
8.4 Jenkins拉取Maven项目
8.4.1 安装maven插件
8.4.2 jenkins集成maven软件
找到Git,配置Git:
9. 自动拉取
gitee仓库的代码,默认gitee不允许内网拉取。这里设计一个知识点叫做内网穿透。
9.1 内外穿透
通常个人电脑无论是连接WIFI上网还是用网线上网,都是属于局域网里边的,外网无法直接访问到你的电脑,内网穿透可以让你的局域网中的电脑实现外网访问功能。
使用nat:
NATAPP1分钟快速新手图文教程 - NATAPP-内网穿透 基于ngrok的国内高速内网映射工具
9.2 jenkins安装gitee插件
9.3 修改item任务的配置
生成Gitee WebHook 密码:
9.4 修改gitee仓库的配置
添加WebHook:
10. 自动化部署
用shell脚本。
jenkins软件需要大量集成第三方很多软件(maven、git、jdk...),如果我们的项目也部署到该服务器下,势必导致项目性能弱。
所以把jenkins所在的服务下打包好的项目远程复制到其他服务器上,在其他服务器进行项目的启动和关闭。
scp xxx.jar root@远程ip:/远程路径
第一次部署的时候需要输入密码。
10.1 免密复制操作
配置ssh免密登录
免密登录主要是方便jenkins服务器的root用户到应用服务器的root用户上的jar包拷贝,部署本就是jar包拷贝的过程。
在jenkins服务器上使用root用户生成秘钥注意此处是root用户。
$ ssh-keygen -t rsa
# 3次回车
运行后会在当前用户的根目录生成一个.ssh文件夹。
ssh文件夹中的文件描述
-
id_rsa
: 生成的私钥文件 -
id_rsa.pub
: 生成的公钥文件
接下来需要将公钥导入到认证文件中:
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
如果希望ssh公钥生效需满足至少下面两个条件:
-
.ssh
目录的权限必须是700 -
.ssh/authorized_keys
文件权限必须是600
给对应文件授权:
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys
将authorized_keys
文件拷贝到另一台应用服务器的root用户.ssh目录下:
- 在应用服务器上用root用户创建/root/.ssh文件夹 mkdir -p /root/.ssh
- 在jenkins服务器上将pub公钥文件拷贝到应用服务器的.ssh目录下
scp -p ~/.ssh/id_rsa.pub root@应用服务器ip:/root/.ssh/authorized_keys
在jenkins服务器上进行免密连接测试:
ssh 应用服务器ip
总结:
- 在jenkin所在的服务器使用ssh-keygen -t rsa。
- 把公钥加载到认证文件中cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys。
- 修改.ssh [700]和authorized_keys [600]的权限。
- 把jenkins服务器上公钥远程复制到免密的服务器上。mkdir -p /root/.ssh scp -p ~/.ssh/id_rsa.pub root@应用服务器ip:/root/.ssh/authorized_keys。
10.2 在Jenins远程复制的脚本
#!/bin/bash
echo "部署的目录和项目名称"
DIR="/data/app"
projectName="my-boot"
echo "待部署的应用服务器,可多台"
# 部署项目的ip
server_ips="xxxxxxxx"
for server_ip in ${server_ips[@]}
do
echo "ssh连接进行备份操作"
ssh -Tq -oStrictHostKeyChecking=no root@${server_ip} <<EOF
mkdir -p $DIR/backup/${projectName}
mkdir -p $DIR/${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
EOF
echo "拷贝jar包到目标服务器的tmp目录"
scp -q -oStrictHostKeyChecking=no ${WORKSPACE}/target/*.jar root@${server_ip}:/tmp/${projectName}.jar
echo "ssh远程连接进行发布操作"
ssh -q -oStrictHostKeyChecking=no root@${server_ip} <<EOF
mv /tmp/${projectName}.jar $DIR/${projectName}/${projectName}.jar
EOF
done
echo "success"
作用:把jenkins打包的jar远程copy到指定的服务器下。
10.3 启动项目的shell脚本
#!/bin/bash
APP_ID="my-boot"
APP_DIR="/data/app"
nohup java -jar ${APP_DIR}/${APP_ID}/${APP_ID}.jar > release_out.log &
start_ok=false
if [[ $? = 0 ]];then
sleep 3
tail -n 10 release_out.log
sleep 5
tail -n 50 release_out.log
fi
aaa=`grep "Started" release_out.log | awk '{print $1}'`
if [[ -n "${aaa}" ]];then
echo "Application started ok"
exit 0
else
echo "Application started error"
exit 1
fi
10.4 关闭的脚本
#!/bin/bash
APP_ID=my-boot
ps aux | grep ${APP_ID} | grep -v "grep" | awk '{print "kill -9 "$2}' | sh
10.5 在jenkins配置中引入关闭和启动脚本
sh $DIR/${projectName}/stop.sh
sh $DIR/${projectName}/start.sh