基于docker,jenkins,git,nginx发布vue和java项目,使其自动化部署

1.准备工作

  1. 拥有vue项目,java项目,linux服务器,git仓库,linux已装docker服务
  2. 注意如果是windows编辑的Dockerfile文件,导入到linux后其文件类型可能非unix格式,使用指令修改后才可使用,可在vi编辑页使用set ff指令查看是否为unix,使用set ff=unix 修改为unix格式

2.git仓库配置

  1. 上传代码至git仓库,本方法为了便利,不在服务器进行打包,故需上传本地已法宝的文件夹,如vue的dist文件夹和java的target文件夹。
  2. 设置git公钥,在linux服务器配置公钥账户,使linux服务器可进行git抓取动作。
  3. 设置git仅抓取指定目录,如vue项目仅抓取dist的目录,避免文件过多
    3.1 git config core.sparsecheckout true // 抓取指定目录第一步
    3.2 echo “dist” >> .git/info/sparse-checkout // 抓取指定目录第二步

3.在linux服务器设置nginx的dockerFile文件部署vue项目

  1. nginx的dockerFile内容
FROM nginx
# 拷贝本地的dist文件夹内容到docker虚拟服务器文件夹
COPY ./dist/ /usr/share/nginx/html
# 此处更换为自己的配置文件
COPY ./nginx.conf /etc/nginx/conf.d/default.conf
  1. nginx的nginx.conf配置,注意只能填写server节点。
server {
        listen       80; 
        server_name  localhost;
        location / {
            root  /usr/share/nginx/html; # 填写的是docker虚拟机里面的文件地址
            try_files $uri $uri/ /index.html;
        }
    }
  1. ssl证书的nginx.conf配置
# dockerFile里面增加COPY /usr/ssl/ /usr/ssl/
# 或者后期增加docker cp /usr/ssl 12de3629b81b:/usr/ssl 将证书拷贝至docker虚拟机中
# 12de3629b81b为容器id
 server{
    listen       80 ssl;  #注意 此处要加ssl
    server_name  localhost;
    gzip on;
    gzip_min_length 1k;
    gzip_comp_level 9;
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
    gzip_vary on;
    gzip_disable "MSIE [1-6]\.";
    ssl_certificate      /usr/ssl/qsy.net.cn.pem;
    ssl_certificate_key  /usr/ssl/qsy.net.cn.key;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;
}

4.在linux服务器设置java的dockerFile文件或不使用docker部署java

  1. 使用docker配置javadockerFile文件配置
# jdk版本
FROM openjdk:8
# 拷贝服务器java打包文件夹到docker镜像
COPY ./target/target/ /usr/java
# 设置java启动参数
ENV jvm_opts="-server -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms256m -Xmx256m"
# 执行启动java
ENTRYPOINT exec cd /usr/java
ENTRYPOINT exec java -jar $jvm_opts Laboratory-1.2.0.jar
  1. 直接启动java项目

    nohup java -Xms256m -Xmx256m -jar Laboratory-1.2.9.jar &

5.jenkins配置,使git仓库变化后进行自动重新发布的工作

  1. 新建项目
    在这里插入图片描述

  2. 配置git源码管理
    2.1. 新增一个root认证,填写git部署的公钥信息
    2.2. 填写仓库的ssh地址,选择配置好的root认证信息

  3. 配置scm
    H/2 * * * * 意思为2分钟检查一次git仓库状态

  4. 配置 shell
    java的shell代码

#!/bin/bash
BUILD_ID=dontKillMe
git pull git@gitee.com:hanlian_1/ahcjbase.git  #git仓库地址
echo 判断文件是否变化
s1=$(stat -c %Y target)
s2=$(date '+%s')
echo 文件最后修改时间: $s1
echo 系统当前时间: $s2
sstt=$(expr $s2 - $s1)
echo 时间差为: $sstt
if [ $sstt -lt 59 ]; then
echo 停止8092服务
tokill=$(netstat -anp|grep 8092|awk '{printf $7}'|cut -d/ -f1)  #程序端口号
echo 获取pid = $tokill
if [ ! -z "$tokill" ] ; then
echo 准备停止服务...
kill -9 $tokill
fi
echo 已关闭服务
echo 准备重启服务
cd /usr/qsy/java/ahcj/target   #项目服务器发布地址
wait 
echo 服务已启动
nohup java -Xmx256m -Xms256m -jar Laboratory-1.2.0.jar &
else
echo 文件未更新,不进行动作
fi

nginx的shell代码

#!/bin/bash
cd /usr/qsy/vue/ahcj/
git pull git@gitee.com:hfssdcomputer/ahcjvue.git
echo 判断文件是否变化
s1=$(stat -c %Y dist)
s2=$(date '+%s')
echo 文件最后修改时间: $s1
echo 系统当前时间: $s2
sstt=$(expr $s2 - $s1)
echo 时间差为: $sstt
if [ $sstt -lt 59 ]; then
echo 文件更新准备重新编译docker...
# 此处建议自行更改为docker使用挂载文件夹,免得每次重新生成docker镜像
# 停止项目的容器
docker stop ahcjvue
wait
# 移除容器
docker rm ahcjvue
wait
# 重新编译镜像
docker build -t ahcj:vue.1 .
wait
# 启动镜像
docker run --name ahcjvue -d -p 8091:80 ahcj:vue.1
else
echo 文件未更新,不进行重新发布
fi
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值