公司一直在做项目,没有专门的运维,一个开发团队都是后端负责项目发布运维,打包测试发布都是手动的,对平时的开发,测试前后端配合也存在一定的弊端,本着提高效率,节省时间(偷懒)的想法决定研究下jenkins,如何使用jenkins 从svn 代码库 发布Spring Boot 项目。
准备环境:
CentOS 7 (这里我用的虚拟机)
Jenkins 2.150 war 包
Tomcat 9.0.16 (发布jenkins war包)
maven 3.5.4
JDK1.8.0_181
maven 和jdk安装 这里不再赘述,下载安装包 解压安装配置环境变量。
JAVA_HOME=/usr/java/jdk1.8.0_181-amd64
JRE_HOME=/usr/java/jdk1.8.0_181-amd64/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH
MAVEN_HOME=/home/java/apache-maven-3.5.4
export MAVEN_HOME
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$MAVEN_HOME/bin:$PATH
这是我的配置。
关闭防护墙
#centos7
systemctl stop firewalld.service
==============================
#以下为:centOS 6.5关闭防火墙步骤
#关闭命令:
service iptables stop
#永久关闭防火墙:
chkconfig iptables off
两个命令同时运行,运行完成后查看防火墙关闭状态
service iptables status
附加防火墙常用命令:
firewalld的基本使用
启动: systemctl start firewalld
关闭: systemctl stop firewalld
查看状态: systemctl status firewalld
开机禁用 : systemctl disable firewalld
开机启用 : systemctl enable firewalld
配置firewalld-cmd
查看版本: firewall-cmd --version
查看帮助: firewall-cmd --help
显示状态: firewall-cmd --state
查看所有打开的端口: firewall-cmd --zone=public --list-ports
更新防火墙规则: firewall-cmd --reload
查看区域信息: firewall-cmd --get-active-zones
查看指定接口所属区域: firewall-cmd --get-zone-of-interface=eth0
拒绝所有包:firewall-cmd --panic-on
取消拒绝状态: firewall-cmd --panic-off
查看是否拒绝: firewall-cmd --query-panic
添加
firewall-cmd --zone=public --add-port=80/tcp --permanent (--permanent永久生效,没有此参数重启后失效)
重新载入
firewall-cmd --reload
查看
firewall-cmd --zone=public --query-port=80/tcp
删除
firewall-cmd --zone=public --remove-port=80/tcp --permanent
将jenkins war包放到Tomcat webapps 目录下 启动:访问 http://xxx:8080/jenkins
jenkins 卸载
centos
sudo systemctl stop jenkins
sudo systemctl disable jenkins
sudo yum -y remove jenkins
sudo rm -rf /var/{lib,log,cache}/jenkins /usr/lib/jenkins /root/.jenkins
sudo rm -rf `sudo find /{etc,var,run} -name "jenkins*"`
ubantu
//服务
sudo apt-get remove jenkins
//安装包,注意这里如果不是ubuntu那就yum
sudo apt-get remove --auto-remove jenkins
//配置和数据
sudo apt-get purge jenkins
sudo apt-get purge --auto-remove jenkins
据说 它的war包自带Jetty服务器,通过以下命令也可启动:
java -jar jenkins.war &
第一次启动Jenkins时,出于安全考虑,Jenkins会自动生成一个随机的按照口令。注意控制台输出的口令,复制下来,然后在浏览器输入密码:
复制红色的字通过 vi 命令打开,复制里边的密码字符串粘贴到xia下方输入框中 点击 Continue .
进入用户自定义插件界面,建议选择安装官方推荐插件,因为安装后自己也得安装:
接下来是进入插件安装进度界面:
插件一次可能不会完全安装成功,可以点击Retry再次安装。直到全部安装成功
等待一段时间之后,插件安装完成,配置用户名密码全名 邮箱:
系统管理-全局工具配置 jdk路径 maven路径
去掉勾选自动安装
去掉勾选自动安装
有很多插件都是选择的默认的安装的,所以现在需要我们安装的插件不多,
Git plugin,
Maven Integration plugin,
publish over SSH、SSH,
Deploy to container Plugin,
Subversion Plug-in
插件。
插件安装:系统管理 > 插件管理 > 可选插件,勾选需要安装的插件,点击直接安装或者下载重启后安装。
首页点击新建:输入项目名称
下方选择构建一个maven项目,点击确定。
勾选丢弃旧的构建,选择是否备份被替换的旧包。我这里选择备份最近的10个
源码管理,选择svn,配置SVN相关信息,点击add可以输入svn的账户和密码
svn地址:http://192.168.0.xx/svn/xxx@HEAD,@HEAD
意思取最新版本
构建环境中勾选“Add timestamps to the Console Output”,代码构建的过程中会将日志打印出来
在Build中输入打包前的mvn命令 clean package,如:
注意配置构建脚本的时候的写法 .,jenkins为了有效的kill job运行时创建的子进程,避免产生过多的僵尸进程,提供了一些原生代码找到并杀死它们。所以 使用 nohup xxx/start.sh & 启动job结束后服务会被kill掉 需要加入BUILD_ID=dontKillMe。
点击Advanced...Usecustom workspace 自定义目录,项目编译后的文件(target 目录下的文件)会存放到此处。
#!/bin/sh
RBC_WEB_JAR=rbc-web.jar
#!项目启动 jar包存放 目录
RBC_WEB_JAR_PATH=/home/rbc/rbc-project-run/rbc-web/
#!备份 jar包存放 目录
BACKUP_DIR=/home/rbc/rbc-project-run/rbc-web/backup/
#!编译好的jar 包
TARGET_JAR_FILE=/home/rbc/elens-rbc/target/rbc-web.jar
cd $RBC_WEB_JAR_PATH
echo "杀死 rbc-web.jar 进程..."
pid=`ps -ef | grep $RBC_WEB_JAR | grep -v grep | awk '{print $2}'`
echo "pid:"$pid
if [ -n "$pid" ];then
echo "kill -9 的 pid:"$pid
kill -9 $pid
fi
echo "清除进程已完成..."
if [ -f "$TARGET_JAR_FILE" ];then
#!将现有的 jar 备份
mv $RBC_WEB_JAR_PATH$RBC_WEB_JAR $BACKUP_DIR$RBC_WEB_JAR.`date +%Y%m%d%H%M%S`
echo "项目备份完成..."
fi
#!替换 新的 jar包
cp $TARGET_JAR_FILE $RBC_WEB_JAR_PATH
#!删除老旧的备份项目
cd $BACKUP_DIR
ls -lt | awk 'NR>5{print $NF}' | xargs rm -rf
cd $RBC_WEB_JAR_PATH
nohup java -jar rbc-web.jar &
if [ $? = 0 ];then
sleep 30
tail -n 50 nohup.out
fi
echo "rbc-web 项目启动完成..."
这段脚本的意思,就是kill旧项目,删除旧项目,备份老项目并删掉太老的备份项目,启动新项目。
点击保存