胖胖的枫叶
主页
博客
知识图谱
产品设计
数据分析
企业架构
项目管理
效率工具
全栈开发
后端
前端
测试
运维
数据
面试
  • openJdk-docs
  • spring-projects-docs
  • mysql-docs
  • redis-commands
  • redis-projects
  • apache-rocketmq
  • docker-docs
  • mybatis-docs
  • netty-docs
  • journaldev
  • geeksforgeeks
  • 浮生若梦
  • 后端进阶
  • 并发编程网
  • 英语肌肉记忆锻炼软件
  • 墨菲安全
  • Redisson-docs
  • jmh-Visual
  • 美团技术
  • MavenSearch
主页
博客
知识图谱
产品设计
数据分析
企业架构
项目管理
效率工具
全栈开发
后端
前端
测试
运维
数据
面试
  • openJdk-docs
  • spring-projects-docs
  • mysql-docs
  • redis-commands
  • redis-projects
  • apache-rocketmq
  • docker-docs
  • mybatis-docs
  • netty-docs
  • journaldev
  • geeksforgeeks
  • 浮生若梦
  • 后端进阶
  • 并发编程网
  • 英语肌肉记忆锻炼软件
  • 墨菲安全
  • Redisson-docs
  • jmh-Visual
  • 美团技术
  • MavenSearch
  • 博客

    • 博客迁移说明
    • 2024年
    • 2023年
    • 2022年
    • 2021年
    • 2020年
    • 2019年
    • 2018年

整理下Jenkins本地部署程序的过程。

  • 在开发阶段,许多编译工具会将我们的源码编译可使用的文件。例如 vue-cli 的项目会被 webpack 打包编译为浏览器的文件,Java 项目会被编译为 .class/jar 文件以供服务器使用。

    1. 开发人员将源代码,经过编译、压缩等一系列流程打包

    2. 上传到服务器。

    3. 在服务器将编译后的文件,手动可用的容器服务内(例如 Nginx,Tomcat,Apache 等服务)

单机部署

在jenkins所在的机器上部署程序

  1. 部署jenkins并配置环境
  2. 设置jenkins-credentials (后续用于从git仓库中获取代码)
  3. 创建任务
    1. 设置仓库地址
    2. 设置程序部署shell脚本
  • jenkins shell
mvn clean install -Dmaven.test.skip=true
cp x x x/target/xxx-1.0.0-SNAPSHOT.jar /opt/xxx/upgrade
cd /opt/xxx
BUILD_ID=dontKillMe sh xxx.sh
  • 编写程序运行shell脚本。
  • 部署java
#!/bin/bash
app=xxx
appName=${app}-1.0.0-SNAPSHOT
projPath=/opt/xxx
upgradePath=${projPath}/upgrade
backPath=${projPath}/backup
logFile=${projPath}/data/logs/${app}.log

# 检查升级文件是否存在
echo "checking upgrade file..."
if [ ! -f ${upgradePath}/${appName}.jar ]; then
    echo "cann't found file ${upgradePath}/${appName}.jar!"
    exit
fi

# 结束进程
pid=`ps aux | grep ${projPath}/${appName}.jar | grep -v grep | grep -v kill | awk '{print $2}'`
if [ ${pid} ]; then
    echo "kill ${appName}!"
    kill -9 $pid
fi

# 备份原升级文件,如果存在的话
if [ -f ${projPath}/${appName}.jar ]; then
    timeStr=`date +%Y%m%d%H%M%S`
    mv ${projPath}/${appName}.jar ${backPath}/${appName}.jar.bak_${timeStr}
    echo "load ${appName} success!"
    echo "backup ${appName} success!"
fi

# 拷贝升级文件
echo "copy ${appName}.jar..."
cp ${upgradePath}/${appName}.jar ${projPath}/${appName}.jar

# 启动进程
echo "start ${appName}..."
nohup java -Djava.security.egd=file:/dev/./urandom -Xms512m -Xmx512m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -jar ${projPath}/${appName}.jar --spring.profiles.active=test >/dev/null 2>&1 &

# 查看日志
# 判断当天日志文件是否存在
if [ ! -f ${logFile} ]; then
    # 文件不存在则创建文件,再执行tail命令
    touch ${logFile}
fi
echo "tail -f ${logFile}"

  • 部署vue
#!/bin/bash

# git revert
# git restore .

applicationPath=/opt/view/xxxx

echo 'delete old files...'
rm -rf ${applicationPath}/*

echo 'copy files after npm build!'
cp -rf dist/* ${applicationPath}

Last Updated:
Contributors: 庆峰