一.为什么要使用Jenkins,到底有什么好处?

传统部署:通过maven命令:mvn clean install "-Dmanven.test.skip=true" -Pprod 将项目打一个jar,然后通过xftp上传到服务器,xshell上面启动项目(nohup java -jar xxxx.jar > xxxx.out 2>&1 & )通过上述操作,繁琐还容易出错。而 Jenkins 只需要你打开网页、选择已维护好的项目,点击构建就可以了。

二.安装Jenkins

   安装JDK  jdk 安装    

  下载 Jenkins ,我们采用下载war 

   官网下载:Jenkins

    

 镜像下载:阿里云开源镜像站资源目录

 在服务器opt目录下创建一个jenkins目录,并把下载好的jenkins.war上传到这个目录下面 

 启动jenkins

nohup java -jar jenkins.war --httpPort=9090 >jenkins.out 2>&1 &  

 nohup 是为了关闭窗口 jenkons程序不关闭,httpPort 为jenkins指定 端口

三.jenkins设置

 浏览器打开 http:// 服务器IP :9090

 需要输入管理员密码,并提示你密码的存放位置

cat /root/.jenkins/secrets/initialAdminPassword

 

这个看情况选择:可以选择“安装推荐的插件”,也可以“选择插件安装”  个人喜好自定义安装(选项2)

 

四.项目配置

 jenkins 全局配置:jdk、maven信息

设置JDK      linux 安装JDK

 设置git (默认的就可以了)

 设置maven     linux 安装 maven

设置SSH Servers

找到:publish-over-ssh 进行安装

然后在  "系统管理"  ->  "系统配置"  中找到 SSH Servers   新增

 

如有多台服务器,就点击新增继续添加。

 设置linux执行脚本(如果嫌麻烦,也可以在 jenksin SSH Publishers 里面设置,下面会介绍)

 先创建bin目录编写一个sh脚本(如果自己创建的txt修改的后缀名,需要注意编码格式UTF-8)

 脚本信息为:

#!/bin/bash
source /etc/profile
#遇到不存在的变量报错,并停止执行
set -o nounset
############# 全局变量定义 ##########
sedfun() { sed_a1=`echo $1 | awk -F '=' '{print $1}'` ; sed -i 's#^'$sed_a1'[[:space:]]*=.*#'"$1"'#g' ${File_Path} ; }

ObjectName=$1
JarName=$1.jar
#项目部署根目录
API_ROOT=/app/${ObjectName}
#项目jar临时上传目录
TMP_DIR=/app/${ObjectName}/tmp
##历史版本备份目录
SubjectBack=/app/${ObjectName}/backup
#Logs_Dir=/app/${ObjectName}/logs

echo "============[基础配置信息]==============="
java -version
echo "项目部署根目录:"${API_ROOT}
echo "项目JAR名称:"${JarName}
echo "项目JAR临时目录:"${TMP_DIR}
echo "项目历史备份目录:"${SubjectBack}
echo "======================================"

echo "============[发布项目开始]============"
if [ ! -d "${API_ROOT}" ]; then mkdir -p ${API_ROOT}; fi
if [ ! -d "${SubjectBack}" ]; then mkdir -p ${SubjectBack}; fi
#if [ ! -d "${Logs_Dir}" ]; then mkdir -p ${Logs_Dir}; fi

############### 关闭当前主机项目 ###################
echo "============[关闭服务开始]============"
PID=`ps -ef|grep java|grep "${JarName}"|grep -v grep|awk '{print $2}'`
if [ "${PID}" ];then ps -ef|grep java|grep "${JarName}"|grep -v grep|awk '{print $2}'|xargs kill -9;fi
echo "============[关闭服务完成]============"

################## 备份当前项目 ########################
echo "============[备份项目开始]============"
if [  -e "${API_ROOT}/${JarName}" ]; then mv -f ${API_ROOT}/${JarName} ${SubjectBack}/${JarName}; fi
if [  -e "${TMP_DIR}/${JarName}" ]; then mv -f ${TMP_DIR}/${JarName} ${API_ROOT}/${JarName}; fi
if [  -e "${SubjectBack}/${JarName}" ]; then cp -rf ${SubjectBack}/${JarName} ${SubjectBack}/${ObjectName}_`date +%Y-%m-%d-%H%M%S`.jar; fi
cd ${SubjectBack}&&ls -t ${SubjectBack} | awk '{if(NR>6){print $1}}'|xargs rm -f   #保留最近5个版本压缩文件
echo "============[备份项目完成]============"

############### 启动当前项目 ###################
#cd ${API_ROOT}&&nohup java -jar ${JarName} & ###后台执行无反馈结果
#jenkins中使用nohup须加上这句
#BUILD_ID=dontKillMe
echo "============[项目启动开始]============"
cd ${API_ROOT}&&nohup java -jar ${API_ROOT}/${JarName} >/dev/null 2>&1 &
echo "============[项目启动完成]============"

准备工作到此结束

五.设置项目

项目我们已 hello word 一. 创建一个简单的spring-boot项目,实现hello world   为例

1.新建item

2. 构建一个maven项目

 如果列表中没有 “构建一个maven项目” 选择?

 找到  Maven Integration Plugin 下载 安装好,重启即可。

3.基础设置

   选择丢弃旧的构建

 参数化构建过程

 如果选择中没有git参数(系统管理-插件管理->可选插件中找到git相关的安装)

在Branches to bulid 中使用上面配置好的git参数 指定分支填写: ${branch}

  4.设置 git 地址 这里已 创建一个简单的spring-boot项目,实现hello world     项目为例子

 Credentials 表示git 账号和密码,可以添加旁边的添加按钮,添加账号跟密码信息

5.设置打包命令 spring-boot-demo  表示项目名称

clean package -Dmaven.test.skip=true

 6.设置路径

  ssh server name: 为上面准备工作中 ssh server中设置的,在这里只能选择

(原文件)Source files : target/spring-boot-demo.jar

(删除前缀)Remove prefix : target/

(远程目录)Remote directory:/app/spring-boot-demo/tmp

 注:我是提前创建好了,需要注意文件夹权限,权限过低jenkins会构建成功但项目没有启动

(执行命令)Exec command:

source /etc/profile
nohup sh /app/bin/restart.sh spring-boot-demo >/dev/null 2>&1 &

注意:如果不创建 restart.sh 就讲 restart.sh里面的内容复制粘贴到  Exec command 中

如果你的项目做了负载均衡,部署在两台服务器上面,可以点击add server 继续添加

六 .从jenkins 启动项目,测试

配置好,可以在列表中查看配置的项目

进入项目管理界面,可以构建项目、修改、删除等项目 

这里选择分支有什么作用了?

一般项目会分为(master)主干分支、(develop) 开发分支、(release)预发布分布等便于管理

点击立即构建->选择控制台输出->查看一下日志

 日志显示构建成功,并且成功上传一个文件到另外一台服务器

  为了清楚展示,使用xftp展示目录结构

 查看服务是否启动

 通过postman 访问查看

 服务访问成功

Logo

更多推荐