0%

Jenkins-local-deployment-level

整理下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

    1
    2
    3
    4
    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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#!/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
1
2
3
4
5
6
7
8
9
10
11
12
#!/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}