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

results matching ""

    No results matching ""