一,搭建jenkins准备
下载安装jdk环境 -》版本 jdk11
下载安装maven环境 -》版本 maven 3.8.8
git -》版本 1.8.3.1 yum install git
jenkins安装版本:2.414.3
下载地址:https://get.jenkins.io/war-stable/2.414.3/jenkins.war
注:jenkins版本与jdk版本有一定的对应关系,版本不对应可能导致后面虽然安装成功了,但是使用会出问题的情况。另外,jenkins的版本最好在2.38以上,以防有些插件无法进行安装下载
二,相关命令
# 设置jdk、maven等环境变量
vi /etc/profile
# 生效
source /etc/profile
# 启动jennkins
nohup java -jar /data/software/jenkins.war --httpPort=8777 -Djava.awt.headless=true > /data/software/jenkins.log 2>&1 &
# 查看jenkins日志,注 需要在jenkins.log所在目录下执行
tail -222f jenkins.log
# 设置jenkins 下载中央库,在.jenkins/updates目录下执行
sed -i 's/http:\/\/updates.jenkinsci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
# 根据端口查看进程id
lsof -i :8777
或者 netstat -tunlp |grep jenkins
# 杀掉进程
kill -9 xxx
# 开启防火墙8777端口
$ firewall-cmd --zone=public --add-port=8777/tcp --permanent
# 使配置生效
$ firewall-cmd --reload
# 防火墙扩展命令如下(云服务直接操作阿里云安全组即可)
(1)设置开机启用防火墙:systemctl enable firewalld.service
(2)设置开机禁用防火墙:systemctl disable firewalld.service
(3)启动防火墙:systemctl start firewalld
(4)关闭防火墙:systemctl stop firewalld
(5)检查防火墙状态:systemctl status firewalld
(1)查看防火墙状态:firewall-cmd --state
(2)重新加载配置:firewall-cmd --reload
(3)查看开放的端口:firewall-cmd --list-ports
(4)开启防火墙端口:firewall-cmd --zone=public --add-port=9200/tcp --permanent
命令含义:
–zone #作用域
–add-port=9200/tcp #添加端口,格式为:端口/通讯协议
–permanent #永久生效,没有此参数重启后失效
注意:添加端口后,必须用命令firewall-cmd --reload重新加载一遍才会生效
(5)关闭防火墙端口:firewall-cmd --zone=public --remove-port=9200/tcp --permanent
注:jenkins的数据一般在.jenkins所在目录下,即 如果你首次运行了jenkins.war并且已经登录进行下载安装插件了,但是由于插件下载安装出现了问题,或者其他原因,你想要重装jenkins,除了停止jenkins.war程序并杀掉相应程序外,你还需要将.jenkins整个目录数据删掉,这样你在重新启动程序后才会重新进入到下载安装插件的环节。
三,安装插件
除了安装默认的插件之外,一般还需要安装如下:
Git Parameter、NodeJS、SonarQube Scanner、Maven Integration、Workspace Cleanup、Credentials Binding
注:某些插件安装不了大多数是因为jenkins版本问题导致,可能需要升级解决。
四,全局配置
jdk、maven、git、jenkins配置
配置git:
注:这里填写git后会自动匹配
配置jdk:
配置maven:
设置jenkins下载:
进入 Manage Jenkins -》 Manage Plugin -> Advanced 最下面有 Update Site 设置为:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
设置凭证:
注:这里设置的是github/gitlab登录的账号密码
当然也可以使用公钥方式
五,从github或者gitlab拉取代码
部署SpringBoot项目,选择 pom方式新建任务
源码管理:
需要注意的是这里填写的url指的是 github浏览器中的项目地址
六,将拉取的代码上传到另一台服务器上进行发布
scp -p file root@xxxxx: targetFile
scp -p ~/.ssh/id_rsa.pub root@1.94.63.103:/home/admin/.ssh/authorized_keys
在jenkins excute shell中编写脚本:
#!/bin/bash
echo "部署的目录和项目名称"
DIR="/data/app"
projectName="sp-server"
echo "待部署的应用服务器,可多台"
server_ips="122.51.47.173"
for server_ip in ${server_ips[@]}
do
echo "ssh连接进行备份操作"
ssh -Tq -oStrictHostKeyChecking=no root@${server_ip} <<EOF
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
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
sh $DIR/${projectName}/stop.sh
sh $DIR/${projectName}/start.sh
EOF
done
echo "success"
如果在传递jar中报错:SSH时出现WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!那么,需要在jenkins服务器中执行以下脚本:
ssh-keygen -R 1.94.63.103 # 由于之前重装过系统,当执行新的ssh命令后需要清掉之前的缓存
目标服务器上在项目目录下准备两个脚本:
start.sh
#!/bin/bash
set -e #任何命令出错就退出
set -o pipefail
APP_ID=sp-server
APP_DIR="/data/app"
nohup java -Dspring.profiles.active=dev -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
stop.sh
#!/bin/bash
APP_ID=sp-server
ps aux | grep ${APP_ID} | grep -v "grep" | awk '{print "kill -9 "$2}' | sh
部署vue项目:
在目标部署服务器上安装nodejs、git等
# 安装nodejs
# 安装git
yum install git
设置git仓库:
编写shell部署脚本:
#!/bin/bash
echo "部署的目录和项目名称"
DIR="/data/app"
projectName="sps_web"
echo "待部署的应用服务器,可多台"
server_ips="122.51.47.173"
for server_ip in ${server_ips[@]}
do
echo "ssh连接进行备份操作"
ssh -Tq -oStrictHostKeyChecking=no root@${server_ip} <<EOF
mkdir -p $DIR/backup/${projectName}
if [ -f "$DIR/${projectName}/*" ];then
mv $DIR/${projectName}/* $DIR/backup/${projectName}/${projectName}-`date "+%Y%m%d_%H%M%S"`
fi
EOF
echo "拷贝项目到目标服务器的tmp目录"
scp -r -oStrictHostKeyChecking=no ${WORKSPACE} root@${server_ip}:/tmp/
scp -r -oStrictHostKeyChecking=no ${WORKSPACE} root@${server_ip}:$DIR/
done
ssh -Tq -oStrictHostKeyChecking=no root@${server_ip} <<EOF
cd /data/app
sh stop.sh
sh start.sh
EOF
echo "success"
其中,start.sh脚本
#!/bin/bash
cd ./sps_web
npm install
echo "开始启动程序"
nohup npm run dev > /dev/null 2>&1 &
echo "启动成功!"
stop.sh脚本
#!/bin/bash
cd ./sps_web/
# 指定要杀死的端口号
port=9527
# 查找使用指定端口的进程ID(PID)
pid=$(lsof -i :$port -t)
if [ -n "$pid" ]; then
# 杀死进程
kill $pid
echo "进程 $pid 已被杀死"
else
echo "未找到使用端口 $port 的进程"
fi
参照: