当前位置: 首页 > news >正文

vue项目docker打包通过k8s

注意看vuetest
(1)添加变量
This project is parameterized 模块下
                Add Parameter
                        选择变量类型,比如单选Choice Parameter
                                设置参数

                                        test2
                                        poc

   (2)使用变量                            

                在jenkins   Build with Parameters下面选择对应环境变量和分支

#!/bin/bash
commitId=$(git rev-parse refs/remotes/origin/${branch}^{commit})    
echo "commitId:$commitId" 
#echo "cp -rf /home/finance/App/vuetest/node_modules/. ./node_modules"
#cp -rf /home/finance/App/vuetest/node_modules/. ./node_modules 
echo "sudo npm install"
sudo npm rebuild node-sass
sudo npm install 
if [ $? -ne 0 ]; then
    echo "npm install failed"
    exit 1
else
    echo "npm install succeed"
fi
echo "sudo npm run build:${env}"
sudo npm run build:${env}
if [ $? -ne 0 ]; then
    echo "npm run build failed"
    exit 1
else
    echo "npm run build succeed"
fi
echo "mkdir -p ./doc/base/enviroment/${env}-admin/dist"
mkdir -p ./doc/base/enviroment/${env}-admin/dist
echo "cp -rf dist/* ./doc/base/enviroment/${env}-admin/dist"
cp -rf dist/* ./doc/base/enviroment/${env}-admin/dist
docker build -t harbor.maip.io/test/vuetest:${env}$commitId ./doc/base/enviroment/${env}-admin
if [ $? -ne 0 ]; then
    echo "docker build failed"
    exit 1
else
    echo "docker build succeed"
fi
docker push harbor.maip.io/test/vuetest:${env}$commitId
if [ $? -ne 0 ]; then
    echo "docker push failed"
    exit 1
else
    echo "docker push succeed"
fi

rm -rf ./doc/base/enviroment/${env}-admin/dist

sed -ri "s!(test/vuetest:).+!test/vuetest:${env}$commitId!" ./doc/base/enviroment/${env}-admin/k8s_deploy.yaml
kubectl delete -f ./doc/base/enviroment/${env}-admin/k8s_deploy.yaml
kubectl apply -f ./doc/base/enviroment/${env}-admin/k8s_deploy.yaml

备注文件 看备注

# .sh文件

#!/bin/bash

commitId=$(git rev-parse refs/remotes/origin/${branch}^{commit}) 

# 获取对应分支的commitID

echo "commitId:$commitId" 

#echo "cp -rf /home/finance/App/vuetest/node_modules/. ./node_modules"

#cp -rf /home/finance/App/vuetest/node_modules/. ./node_modules 

echo "sudo npm install"

# 重构一下node-sass依赖

sudo npm rebuild node-sass

# 加载依赖

sudo npm install 

# 判断依赖是否加载完成  

# $?是shell变量,表示"最后一次执行命令"的退出状态.0为成功,非0为失败.

# -ne 不等于,如:if ["$a" -ne "$b" ]

# 如果任务失败 exit 1 强制退出

if [ $? -ne 0 ]; then

    echo "npm install failed"

    exit 1

else

    echo "npm install succeed"

fi

echo "sudo npm run build:${env}"

# 执行打包命令 build:test 环境变量 test

sudo npm run build:${env}

# 判断是否成功

if [ $? -ne 0 ]; then

    echo "npm run build failed"

    exit 1

else

    echo "npm run build succeed"

fi

echo "mkdir -p ./doc/base/enviroment/${env}-admin/dist"

# 创建多节文件夹  -p多级的意思

# 这里当前目录是项目目录

# ./doc/base/enviroment/下面环境变量-根据不同环境变量打不同的包

# dev-admin 下面有

    # dist 打包文件

    # Dockerfile

    # 如果是Nginx配置 就会有nginx.conf文件

    # 如果是 k8s 就会有k8s的 yaml文件  比如命名:k8s_deploy.yaml

mkdir -p ./doc/base/enviroment/${env}-admin/dist

echo "cp -rf dist/* ./doc/base/enviroment/${env}-admin/dist"

# 强制拷贝 打包后的文件 (dist文件下面所有文件) 到 目标目录下面,方便打docker

cp -rf dist/* ./doc/base/enviroment/${env}-admin/dist

# docker build -t name 目录    生成镜像

# arbor.maip.io/test/ocrweb:${env}$commitId 镜像名

# ./doc/base/enviroment/${env}-admin 目标文件

docker build -t harbor.maip.io/test/ocrweb:${env}$commitId ./doc/base/enviroment/${env}-admin

# 判断是否成功

if [ $? -ne 0 ]; then

    echo "docker build failed"

    exit 1

else

    echo "docker build succeed"

fi

# 成功后 将镜像推送到镜像仓库 执行docker

docker push harbor.maip.io/test/ocrweb:${env}$commitId

if [ $? -ne 0 ]; then

    echo "docker push failed"

    exit 1

else

    echo "docker push succeed"

fi

# 成功后 删除临时目录

rm -rf ./doc/base/enviroment/${env}-admin/dist

#将 ./doc/base/enviroment/${env}-admin/k8s_deploy.yaml文件中 test/ocrweb:镜像id改成 test/ocrweb:${env}$commitId 新的id

sed -ri "s!(test/ocrweb:).+!test/ocrweb:${env}$commitId!" ./doc/base/enviroment/${env}-admin/k8s_deploy.yaml

# 删除 k8s指定资源

kubectl delete -f ./doc/base/enviroment/${env}-admin/k8s_deploy.yaml

# 新建、更新

kubectl apply -f ./doc/base/enviroment/${env}-admin/k8s_deploy.yaml

 k8s_deploy.yaml  k8s配置

apiVersion: v1

kind: ConfigMap

metadata:

  name: vuetest-config

  namespace: poc-admin

  labels:

    app: vuetest

data:

  default.conf: |

    server {

        listen    80;

        server_name *.maip.test;

        location / {

            root   /home/data;

            index  index.html;

        }

    }

---

apiVersion: apps/v1

kind: Deployment

metadata:

  labels:

    app: vuetest

  name: vuetest

  namespace: poc-admin

spec:

  selector:

    matchLabels:

      app: vuetest  #{{appname}}

  template:

    metadata:

      labels:

        app: vuetest  #{{appname}}

        version: v1

        log-index: applog-vuetest-poc-admin

    spec:

      tolerations:

      - key: "special.repo"

        operator: "Equal"

        value: "true"

        effect: "NoSchedule"

      containers:

      - name: vuetest

        image: harbor.maip.io/test/vuetest:daacd5f23asdfaf

        imagePullPolicy: IfNotPresent

        livenessProbe:

          initialDelaySeconds: 30

          periodSeconds: 30

          tcpSocket:

            port: 80

        ports:

        - containerPort: 80

          name: web

        volumeMounts:

        - name: vuetest-config

          mountPath: /etc/nginx/conf.d

        resources:  #资源需要替换

          limits:

            cpu: "1"

            memory: 2048Mi

          requests:

            cpu: "300m"

            memory: 1024Mi

      volumes:

      - name: vuetest-config

        configMap:

          name: vuetest-config        

---

apiVersion: v1

kind: Service

metadata:

  labels:

    app: vuetest        #{{appname}}

  name: vuetest-service  #{{appname}}-service

  namespace: poc-admin

spec:

  ports:

  - name: http

    port: 80

    targetPort: 80

  selector:

    app: vuetest   #{{appname}}          

---

apiVersion: extensions/v1beta1

kind: Ingress

metadata:

  name: vuetest-service

  namespace: poc-admin

  annotations:

    kubernetes.io/ingress.class: "ai"

spec:

  rules:

  - host: adminweb-exp.msxf.com

    http:

      paths:

      - path:

        backend:

          serviceName: vuetest-service

          servicePort: 80


 

Dockerfile 配置
 

FROM nginx:1.18.0

USER root

RUN mkdir -p /home/data

COPY dist /home/data/

WORKDIR /home/data

如果是 jenkins nginx
jenkins配置
 

#!/bin/bash

containerName="robotContainer"
commitId=$(git rev-parse refs/remotes/origin/${branch}^{commit}) 
# 获取对应分支的commitID
echo "commitId:$commitId" 
#echo "cp -rf /home/finance/App/vuetest/node_modules/. ./node_modules"
#cp -rf /home/finance/App/vuetest/node_modules/. ./node_modules 
echo "sudo npm install"
# 重构一下node-sass依赖
sudo npm rebuild node-sass
# 加载依赖
sudo npm install 
# 判断依赖是否加载完成  
# $?是shell变量,表示"最后一次执行命令"的退出状态.0为成功,非0为失败.
# -ne 不等于,如:if ["$a" -ne "$b" ]
# 如果任务失败 exit 1 强制退出
if [ $? -ne 0 ]; then
    echo "npm install failed"
    exit 1
else
   echo "npm install succeed"
fi
echo "sudo npm run build:${env}"
# 执行打包命令 build:test 环境变量 test
sudo npm run build:${env}
# 判断是否成功
if [ $? -ne 0 ]; then
    echo "npm run build failed"
    exit 1
else
    echo "npm run build succeed"
fi
echo "mkdir -p ./doc/base/enviroment/${env}-admin/dist"
# 创建多节文件夹  -p多级的意思
# 这里当前目录是项目目录
# ./doc/base/enviroment/下面环境变量-根据不同环境变量打不同的包
# dev-admin 下面有
    # dist 打包文件
    # Dockerfile
    # 如果是Nginx配置 就会有nginx.conf文件
    # 如果是 k8s 就会有k8s的 yaml文件  比如命名:k8s_deploy.yaml
mkdir -p ./doc/base/enviroment/${env}-admin/dist
echo "cp -rf dist/* ./doc/base/enviroment/${env}-admin/dist"
# 强制拷贝 打包后的文件 (dist文件下面所有文件) 到 目标目录下面,方便打docker
cp -rf dist/* ./doc/base/enviroment/${env}-admin/dist
# docker build -t name 目录    生成镜像
# arbor.maip.io/test/ocrweb:${env}$commitId 镜像名
# ./doc/base/enviroment/${env}-admin 目标文件
docker build -t harbor.maip.io/test/ocrweb:${env}$commitId ./doc/base/enviroment/${env}-admin
# 判断是否成功
if [ $? -ne 0 ]; then
    echo "docker build failed"
    exit 1
else
    echo "docker build succeed"
fi
# 成功后 将镜像推送到镜像仓库 执行docker
docker push harbor.maip.io/test/ocrweb:${env}$commitId
if [ $? -ne 0 ]; then
    echo "docker push failed"
    exit 1
else
    echo "docker push succeed"
fi
# 成功后 删除临时目录
rm -rf ./doc/base/enviroment/${env}-admin/dist
function runImage(){
    # ansible 这个是个插件 需要配置host 设置免密登陆
    # host在 nginx上配置
    ansible ${host} -m shell -a "docker pull harbor.maip.io/test/ocrweb:${env}$commitId"
    ansible ${host} -m shell -a "docker stop ${containerName}"
    ansible ${host} -m shell -a "docker rm ${containerName}"
    # 创建文件
    ansible ${host} -m shell -a "mkdir -p /home/data/log/"
    # 运行镜像
    # /home/data/:/home/data/ 服务器的路径:docker的路径 映射关系
    #/home/data/log/:/opt/nginx/logs/dialogue-robot.msxf.lo/access_log  服务器目录:docker日志目录  docker重启 日志都没了

    # -p 9088:9012 端口映射 服务器9088 :docker 9102
    # harbor.maip.io/test/ocrweb:${env}$commitId  镜像名称
    ansible ${host} -m shell -a "docker run --name ${containerName} -d -v /home/data/:/home/data/ -v /home/data/log/:/opt/nginx/logs/dialogue-robot.msxf.lo/access_log  -p 9088:9012 --network host -it harbor.maip.io/test/ocrweb:${env}$commitId"
}
runImage
worker_processes auto;
events {
    worker_connections  1024;
}
http
{
        include                         mime.types;
        default_type                    application/octet-stream;
        server_tokens                   off;
        #log_format main                 '$remote_addr - $remote_user [$time_local] '

        #                                                '"$request" $status $bytes_sent '

        #                                                '"$http_referer" "$http_user_agent" '

        #                                                '"$gzip_ratio"';
        log_format  main        '$http_x_forwarded_for | $time_local | $status | $body_bytes_sent | $gzip_ratio | '
                            '$request_method | $scheme | $server_protocol | $server_name | $server_port | '
                            '$request_uri | $request_time | $content_length | $http_referer | $http_user_agent | '
                            '$remote_addr | $remote_port | $remote_user | $http_cookie | $hostname | '
                            '$upstream_status | $upstream_addr | $upstream_http_host | $upstream_response_time';
  #charset                        utf-8;
        server_names_hash_bucket_size   128;
        client_header_buffer_size       32k;
        large_client_header_buffers     4 32k;
        client_max_body_size            300m;
        sendfile                        on;
        underscores_in_headers          on;
        tcp_nopush                      on;
        keepalive_timeout               0;
        tcp_nodelay                     on;
        client_body_buffer_size         512k;
        fastcgi_intercept_errors        on;
        proxy_connect_timeout           90;
        proxy_read_timeout              180;
        proxy_send_timeout              180;
        proxy_buffer_size               256k;
        proxy_buffers                   4 256k;
        proxy_busy_buffers_size         256k;
        proxy_temp_file_write_size      256k;
        proxy_intercept_errors          on;
        server_name_in_redirect         off;
        proxy_hide_header       X-Powered-By;
        gzip                            on;
        gzip_min_length                 100;
        gzip_buffers                    4 16k;
        gzip_http_version               1.0;
        gzip_comp_level                 9;
        gzip_types                      text/plain application/x-javascript text/css application/xml;
        gzip_vary                       on;
        #error_page 400 401 402 403 404 405 408 410 412 413 414 415 500 501 502 503 506 = http://www.msfinance.cn/error2.aspx;
        map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
  }

include domains/*;
#######default server####
    server {
        listen 9012;
          server_name localhost;
          access_log /opt/nginx/logs/dialogue-robot.msxf.lo/access_log main;
          error_log /opt/nginx/logs/dialogue-robot.msxf.lo/error_log notice;
          add_header Access-Control-Allow-Origin *;
          add_header Access-Control-Allow-Headers X-Requested-With;
          add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
          root  /usr/share/nginx/html/;
          location / {
            try_files $uri $uri/ /index.html;
          }
          location ~.*\.(js|css|jpg|png|jpeg|gif|mp4|svg|woff|ico|tff)$ {
          expires 30d;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}         

相关文章:

  • 论文教程之阅读科学论文11步法,详细介绍了每个部分的关注点
  • [云原生] [kubernetes] 基于K8S安装kubesphere
  • docker部署服务初体验
  • 每日学一个设计模式23——解释器模式
  • C. Minimum Notation #823 div2
  • Python 教程之 Numpy(2)—— 数组
  • 【踩坑】在linux服务器上配置mysql并开放3306端口
  • JAVA基础(四十九)——自定义泛型
  • MySQL中的不等于
  • 【Redis】Redis高级:主从
  • 二进制方式安装k8s高可用集群(一)
  • Exception in thread main org.apache.ibatis.exceptions.PersistenceException:报错解决
  • mysql 数据库使用分享
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • 比较Hive数据库与MySQL数据库
  • Android系统模拟器绘制实现概述
  • CAP 一致性协议及应用解析
  • crontab执行失败的多种原因
  • Docker容器管理
  • javascript 总结(常用工具类的封装)
  • js递归,无限分级树形折叠菜单
  • Spark RDD学习: aggregate函数
  • vue-router 实现分析
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • # Apache SeaTunnel 究竟是什么?
  • (二)fiber的基本认识
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (黑马C++)L06 重载与继承
  • (十六)串口UART
  • (四)图像的%2线性拉伸
  • (译) 函数式 JS #1:简介
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (原創) 物件導向與老子思想 (OO)
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .Net core 6.0 升8.0
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • [ C++ ] STL_vector -- 迭代器失效问题
  • [ vulhub漏洞复现篇 ] ECShop 2.x / 3.x SQL注入/远程执行代码漏洞 xianzhi-2017-02-82239600
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)
  • [Android]如何调试Native memory crash issue
  • [C#]winform部署PaddleOCRV3推理模型
  • [C/C++]数据结构 栈和队列()
  • [CUDA 学习笔记] CUDA kernel 的 grid_size 和 block_size 选择
  • [CVPR 2023:3D Gaussian Splatting:实时的神经场渲染]
  • [DL]深度学习_Feature Pyramid Network
  • [error] 17755#0: *58522 readv() failed (104: Connection reset by peer) while reading upstream
  • [flask]http请求//获取请求头信息+客户端信息
  • [Flexbox] Using order to rearrange flexbox children
  • [HDU] 1054 Strategic Game 入门树形DP
  • [HXPCTF 2021]includer‘s revenge
  • [IE技巧] 使IE8以单进程的模式运行