Jenkins
1.安装jenkins
从官网下载jenkins 2.32.3的rpm版本 jenkins
上传到服务中
# cd /opt
# rz -bey jenkins-2.32.3-1.1.noarch.rpm
安装jenkins
# rpm -Uvh rz -bey jenkins-2.32.3-1.1.noarch.rpm
2.配置jenkins
jenkins默认启动在8080端口,需要打开防火墙
# systemctl start firewalld.service
# firewall-cmd --zone=public --add-port=80/tcp --permanent
# firewall-cmd --reload
启动jenkins服务
# systemctl start jenkins
其它
## 查看服务
# systemctl status jenkins
## 停止服务
# systemctl stop jenkins
## 重启服务
# systemctl restart jenkins
3.配置部署环境
- 配置java环境
- 配置maven环境
- 配置Gradle环境
4. 配置部署脚本
api-deploy.sh
#!/bin/bash
### FUNCTIONS
##############
Help(){
echo "usage: api-deploy [options] [args]"
echo ""
echo "Options:"
echo " --help"
echo " Display help information"
echo ""
echo " -j, --jar-name <arg>"
echo " Project jar name"
echo ""
echo " --webapp-path <arg>"
echo " Spring Webapp path"
echo ""
echo " --server-port <arg>"
echo " Spring Webapp path"
echo ""
}
PrintInfo(){
echo " ========================================================================== "
echo " Now deploying spring project "
echo " Host ${ALIYUN_IP}"
echo " Server port ${SERVER_PORT}"
echo " Java app root ${WEBAPP_PATH}"
# echo " Deployment STAGE ${STAGE}"
echo " Jar file to be deployed ${WEBAPP_PATH}/${JAR_NAME}"
echo " "
echo " Java home ${JAVA_HOME}"
echo " Java version ${JAVA_VERSION}"
echo " Gradle home ${GRADLE_HOME}"
echo " Gradle version ${GRADLE_VERSION}"
echo " ========================================================================== "
}
StopServer(){
# 停止服务器
echo " Stop Server ...... "
fuser -n tcp -k ${SERVER_PORT} > /dev/null &
echo " Stop Server Success "
}
DeleteFile(){
# 删除文件
echo " Delete File ${DEST_FILE} ......"
rm -rf ${DEST_FILE}
}
ChangePermission(){
# 修改文件权限
echo " changing file permission: chmod 777 ${DEST_FILE}"
chmod 777 ${DEST_FILE}
}
Run(){
# 运行文件
echo "nohup ${JAVA_HOME}/bin/java -jar ${DEST_FILE} --server.port=${SERVER_PORT} > ${LOG_FILE} 2>&1 &"
nohup ${JAVA_HOME}/bin/java -jar ${DEST_FILE} > ${LOG_FILE} 2>&1 &
}
Watch(){
tail -f ${LOG_FILE} |
while IFS= read line
do
if [[ "$line" == *"$whatToFind"* ]];then
echo $msgAppStarted
pkill tail
fi
done
}
Deploy(){
echo " ========================================================================== "
#停止服务器
StopServer
#修改权限
ChangePermission
#运行
Run
#监听
Watch
echo " ========================================================================== "
}
#如果什么参数都没传显示帮助
if [ $# == 0 ];then
Help
exit 1
fi
# COMMAND LINE VARIABLES
#本机阿里云IP
ALIYUN_IP=`ip addr show eth1 | grep 'inet' | awk '{print $2}' | awk -F '[/]' '{print $1}'`
#当前执行Shell的环境
JAVA_HOME=$JAVA_HOME
#当前执行JDK的版本
JAVA_VERSION=`java -version 2>&1 | grep 'version'`
#当前执行Gradle的版本
#GRADLE_HOME=$GRADLE_HOME
GRADLE_HOME="/opt/gradle/gradle-3.4.1"
#Gradle的版本
GRADLE_VERSION=`${GRADLE_HOME}/bin/gradle -v | grep 'Gradle'`
#项目jar包名称
JAR_NAME=""
#服务的Webapp路径
WEBAPP_PATH=""
#服务运行的端口
SERVER_PORT=80
#日志文件路径
LOG_FILE="${WEBAPP_PATH}/api.log"
whatToFind="Started "
msgAppStarted="Application Started... exiting buffer!"
# 获取参数
ARGS=`getopt -o hj -l help,jar-name:,webapp-path:,server-port:: -- "$@"`
eval set -- "${ARGS}"
while true
do
case "$1" in
-h|--help):
Help
exit 1
;;
-j|--jar-name):
JAR_NAME=$2
shift
;;
--webapp-path):
WEBAPP_PATH=$2
shift
;;
--server-port):
SERVER_PORT=$2
shift
;;
--):
shift
break
;;
*)
echo "Internal error!"
Help
exit 1
;;
esac
shift
done
if [ "${JAR_NAME}" == "" ];then
echo "Jar name is null"
Help
exit 1
fi
if [ "${WEBAPP_PATH}" == "" ];then
echo "Webapp path is null"
Help
exit 1
fi
#目标文件
DEST_FILE=${WEBAPP_PATH}/${JAR_NAME}
#提供大量部署信息供扩展脚本使用
export JAR_NAME
export WEBAPP_PATH
export SERVER_PORT
PrintInfo
Deploy
上传到服务器
# mkdir /opt/bin
# cd /opt/bin
# rz -bey api-deploy.sh
修改脚本执行权限
# chmod 777 api-deploy.sh
添加链接
# ln -s /opt/bin/api-deploy.sh /usr/bin/api-deploy
5.配置jenkins
Execute shell
cp -rf ${WORKSPACE}/build/libs/boot-api-1.0.0.jar /opt/deploy/
BUILD_ID=dontKillMe api-deploy --jar-name=boot-api-1.0.0.jar --webapp-path=/opt/deploy --server-port=80
注意:如果使用nohup命令后台运行程序,jenkins中必须使用BUILD_ID=dontKillMe