1. 环境

目录

1. 环境

2.jenkins插件配置

3、设置其他ssh连接服务器的信息:

4.新建Maven项目

 源码管理

 构建环境

 Build POM文件的相对路径​

         5.构建


Jenkins 的环境我已经搭建,不会的小伙伴可自行百度。

Jenkins 需要配置maven环境、JDK环境。

点击 Global Tool Configuration

 Maven的配置路径,确保Linux安装了Maven,找到配置文件路径

同样的先安装JDK,再填上路径。建议自己下载JDK。(jdk-8u144-linux-x64.tar.gz)

因为OpenJdk只是jre,没有安装jdk,maven打包会报错。

Git的安装路径

完了后应用和保存 

 2.jenkins插件配置

 需要安装三个插件

SSH plugin 

Build With Parameters 输入框式的参数

Persistent Parameter 下拉框式的参数

搜索插件名安装。

 安装完重启jenkins

http://IP:你的端口/restart

3、设置其他ssh连接服务器的信息:

点进Confgure System,在最底下

Name:取一个自己容易认的名称,如**项目测试机

Hostname:指连接机器的IP或域名

Username:连接机器的用户,必须使用一个有权限的用户,如果觉得root太大,可在服务器另建一个用户,专门用来做jenkins访问使用的

Remote Directory:远程连接上去默认访问的路径,必须存在,并且有权限

勾选下方的权限选项,并设置一个密码password

此密码为登录用户名相对应的密码,并且可用,否则连接不了。

 4.新建Maven项目

这个就是刚刚插件的带参数构建,可以自定义一些变量运行,不要每次去改执行脚本

 源码管理

这里有个坑勿踩。如果不是特殊需求,千万别勾选“构建触发器”的 Build whenever a SNAPSHOT dependency is built。因为它会自动启动别的maven项目部署。比如生产的部署。

构建环境

勾选SSH,  Send files or execute commands over SSH after the build runs

勾选日志,Add timestamps to the Console Output

这里的Remote directory是部署的Linux服务器路径,但是如果SSH配置了路径则最终路径是 SSH配置服务器路径+Remote directory路径

# 这步是jenkins上传的目录复制到你部署的目录
cp /var/xx_services/xx/target/${jar_name}  /home/xx_services/jenkins_build/
cd  /home/xx_services/xx_sh/;
chmod 777 startadmin.sh;
chmod 777 kill.sh;
./startadmin.sh ${workspace} ${jdk_path} ${jar_name} ${spring_profile} ${status} ${version}

 Build POM文件的相对路径

 最后应用,保存。 

5.构建

红色框都是前面的带参数构建配置的。

最后需要复制sh脚本到你服务器的路径下,这个是前面配置好的路径。

startadmin.sh

#!/bin/bash
export BUILD_ID=dontKillme

WORKSPACE=${1}
JDK_PATH=${2}
JAR_NAME=${3}
spring_profile=${4}

PID=`ps -ef | grep ${JAR_NAME} | grep -v grep | grep -v startup | awk '{print \$2}'`
echo $PID;
if [ ! "$PID" ] ;then
     echo "进程不存在"
else
    echo "进程存在,杀死进程PID$PID"
    # 只能调用其他shell来kill,否则会先把jenkins查找线程给结束了,导致下面未执行
    ./kill.sh ${JAR_NAME}
fi

echo "服务启动开始"
nohup ${JDK_PATH} -jar  -Dspring.profiles.active=${spring_profile} ${WORKSPACE}/${JAR_NAME} &

kill.sh

#!/bin/bash
# $1传递的第一个参数
jar_name=$1
#带上[第一个字母]查找就不会查找到自身查找进程ID了,后面也不能带后缀.jar之类的,否则搜不到,9-15是截取进程ID
PID=`ps -ef | grep [g]ateway-0.0.1-SNAPSHOT  | cut -c 9-15 `

echo $1;
echo $PID;
if [ ! "$PID" ] ;then
	 echo "进程不存在"
else
	echo "进程存在,杀死进程PID$PID"
	# 只能调用其他shell来kill,否则会先把jenkins查找线程给结束了,导致下面未执行
	kill -s 9 $PID
fi

6.高级版本,带回滚,带定期清理备份的startadmin.sh

加了两个变量status=${5} (这个是下拉多选Deploy:部署 ,Rollback是回退需要填写每次构建的版本号version),version=${6}

#!/bin/bash
export BUILD_ID=dontKillme #这一句很重要,这样指定了,项目启动之后才不会被Jenkins杀掉。
date_time=`date +"%Y%m%d%H%M%S"`
backup_dir=bak
WORKSPACE=${1}
JDK_PATH=${2}
JAR_NAME=${3}
spring_profile=${4}
status=${5}
version=${6}
case $status  in
  Deploy) #部署新版本
    echo "status:$status"
    path="${WORKSPACE}/${backup_dir}/${version}"      #创建每次要备份的目录
	echo "bakDir:$path"
    if [ -d $path ];
    then
        echo "The files is already exists. "
    else
        mkdir -p  $path
    fi
	# 1.将打包好的jar包备份到相应目录,覆盖已存在的目标
    cp -f  ${WORKSPACE}/jenkins_build/${JAR_NAME}  $path
    echo "backup Completing!"
	
	# 2.杀掉正在运行的进程
	# 只能调用其他shell来kill,否则会先把jenkins查找线程给结束了,导致下面未执行
	./kill.sh ${JAR_NAME}
	
	# 3.部署新包
	echo "从$WORKSPACE/jenkins_build/$JAR_NAME部署新程序包"
	cp ${WORKSPACE}/jenkins_build/${JAR_NAME} ${WORKSPACE}/${JAR_NAME}
	
	# 4.启动服务
	echo "服务启动开始..."
	nohup ${JDK_PATH} -jar  -Dspring.profiles.active=${spring_profile} ${WORKSPACE}/${JAR_NAME} &
	echo "服务启动完毕!"
    ;;
  Rollback) #版本回退
      echo "status:$status"
      echo "version:$version"
	  # 1.杀掉正在运行的进程
	  # 只能调用其他shell来kill,否则会先把jenkins查找线程给结束了,导致下面未执行
		./kill.sh ${JAR_NAME}
		
	  # 2.进入备份目录,将备份拷贝到程序打包目录中,并覆盖之前的jar包
      cd ${WORKSPACE}/bak/$version            
      cp ${JAR_NAME} ${WORKSPACE}   
	  
	  # 3.启动服务
	  echo "服务启动开始..."
	  nohup ${JDK_PATH} -jar  -Dspring.profiles.active=${spring_profile} ${WORKSPACE}/${JAR_NAME} &
	  echo "服务启动完毕!"
      ;;
  *)
  exit
      ;;
esac
 

echo "清理备份包,只保留最新的7个"
cd  ${WORKSPACE}/${backup_dir}/
ls -lt | awk '{if(NR>7){print "rm "$9}}' | sh

echo "清理完成"

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐