pipeline + node +jenkins+kubernetes部署yarn前端项目

1、编写Dockerfile文件

# Set the base image
FROM node:16.10.0

# WORKDIR /usr/src/app/
WORKDIR /home/option

# Copy files
COPY ./ /home/option/

# Build arguments
LABEL branch=${BRANCH}
LABEL commit=${COMMIT}
LABEL date=${BUILD_DATE}
ARG ENV

# Set ENV variables
ENV COMMIT_BRANCH=${BRANCH}
ENV COMMIT_SHA=${COMMIT}
ENV BUILD_DATE=${DATE}
ENV INSTALLATION_TYPE=docker
ENV MY_ENV=${ENV}


# Install dependencies and compile
RUN yarn install --frozen-lockfile
RUN yarn
RUN yarn build:${MY_ENV}

# Expose port 15888 - note that docs port is 3000
EXPOSE 3000

# Set the default command to run when starting the container
CMD yarn run start

这个Dockerfile需要传环境变量参数
2、编写pipeline文件

// 参数构建
pipeline {
    agent any
    parameters {
        gitParameter(name: 'BRANCH_TAG', type: 'PT_BRANCH_TAG', branchFilter: 'origin/(.*)', defaultValue: 'main', selectedValue: 'DEFAULT', sortMode: 'DESCENDING_SMART', description: '请选择需要部署的代码:')
        choice(name: 'mode', choices: ['deploy','rollback'], description: '请选择发布或者回滚?')
        choice(name: 'ENVMENT', choices: ['sit','exp','gray','prod'], description: '环境参数')        
        string(name: 'iname', defaultValue: 'option-front', description: '服务名称')
    }
    environment {
        dest_path = "/var/jenkins_home/workspace/${JOB_NAME}"
        job_path = "/data/docker-compose/jenkins/jenkins_home/workspace/${JOB_NAME}"
        mod_path = "/data/docker-compose/jenkins/jenkins_home/mod"
    }

    stages {
        stage('clean'){
            steps {
              cleanWs(
                  cleanWhenAborted: true, 
                  cleanWhenFailure: true, 
                  cleanWhenNotBuilt: true, 
                  cleanWhenSuccess: true, 
                  cleanWhenUnstable: true, 
                  cleanupMatrixParent: true, 
                  disableDeferredWipeout: true,
                  deleteDirs: true
              )
            }    
        }
        
        stage('从 gitlab 中拉取代码') {
            when {
                environment name: 'mode',value: 'deploy'
            }
            steps {
                deleteDir()
                checkout([$class: 'GitSCM', 
                    branches: [[name: "${params.BRANCH_TAG}"]],
                    gitTool: 'Default', 
                    userRemoteConfigs: [[url: 'https://gitlab.yunson.com/test/option/option_front.git', credentialsId: 'gitlab-deploy',]]
                ])
            }
        }

        stage('Node Install And Build docker image'){
            steps{
                script{
                    sh """
                        docker build --build-arg ENV=${ENVMENT} -t harbor.yunson.com/test/${iname}:$ENVMENT .
                    """                  
                }
            }
        }
        stage('Push image to hub'){
            steps{
                script{
                    withCredentials([usernamePassword(credentialsId: 'harbor-secret-dev',, passwordVariable: 'password', usernameVariable: 'username')]) {
                    sh 'docker login -u ${username} -p ${password}  harbor.yunson.com'
                    }
                    sh 'docker push harbor.yunson.com/test/${iname}:$ENVMENT'
                }
            }
        }

        stage('deploy Server'){
            steps{
                script{
                    sh """
                        curl -X PUT \
                        -H "content-type: application/json" \
                        -H "Cookie: KuboardUsername=admin; KuboardAccessKey=ccpyiaxei7i8.disiejnk4dg5pfjlobgmflkuefkufdwf" \
                        -d '{"kind":"deployments","namespace":"test","name":"${iname}","images":{"harbor.yunson.com/test/${iname}":"harbor.yunson.com/test/${iname}:${ENVMENT}"}}' \
                        "http://69.36.89.2:18085/kuboard-api/cluster/Test/kind/CICDApi/admin/resource/updateImageTag"    
                        
                        curl -X PUT \
                        -H "Content-Type: application/yaml" \
                        -H "Cookie: KuboardUsername=admin; KuboardAccessKey=ccpyiaxei7i8.disiejnk4dg5pfjlobgmflkuefkufdwf" \
                        -d '{"kind":"deployments","namespace":"test","name":"${iname}"}' \
                        "http://69.36.89.2:18085/kuboard-api/cluster/Test/kind/CICDApi/admin/resource/restartWorkload"
					"""
                }
            }
        }
    }
}

构建jenkins项目
在这里插入图片描述
构建成功如下
在这里插入图片描述
3、编写部署pods的yaml文件

---
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    k8s.kuboard.cn/displayName: option-front
  labels:
    k8s.kuboard.cn/layer: web
    k8s.kuboard.cn/name: option-front
  name: option-front
  namespace: test
  resourceVersion: '38871139'
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      k8s.kuboard.cn/name: option-front
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      annotations:
        kubectl.kubernetes.io/restartedAt: '2023-11-15T19:51:15+08:00'
      creationTimestamp: null
      labels:
        k8s.kuboard.cn/name: option-front
        pod-template-hash: 645b77b9c
    spec:
      containers:
        - env:
            - name: TZ
              value: Asia/Shanghai
          image: 'harbor.yunson.com/test/option-front:sit'
          imagePullPolicy: Always
          name: option-front
          ports:
            - containerPort: 3000
              name: msag7
              protocol: TCP
          resources: {}
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      imagePullSecrets:
        - name: acr-secret
        - name: harbor-secret
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30

---
apiVersion: v1
kind: Service
metadata:
  annotations: {}
  labels:
    k8s.kuboard.cn/layer: web
    k8s.kuboard.cn/name: option-front
  name: option-front
  namespace: biking
  resourceVersion: '31418671'
spec:
  internalTrafficPolicy: Cluster
  ipFamilies:
    - IPv4
  ipFamilyPolicy: SingleStack
  ports:
    - name: ef5znm
      port: 3000
      protocol: TCP
      targetPort: 3000
  selector:
    k8s.kuboard.cn/name: option-front
  sessionAffinity: None
  type: ClusterIP

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations: {}
  labels:
    k8s.kuboard.cn/layer: web
    k8s.kuboard.cn/name: option-front
  name: option-front
  namespace: biking
  resourceVersion: '38696977'
spec:
  ingressClassName: biking-ingress
  rules:
    - host: option-test.cuiwjrpcvi.com
      http:
        paths:
          - backend:
              service:
                name: option-front
                port:
                  number: 3000
            path: /
            pathType: Prefix
          - backend:
              service:
                name: hyperw-option
                port:
                  number: 9024
            path: /service-option-core
            pathType: Prefix
          - backend:
              service:
                name: hyperw-assets
                port:
                  number: 9027
            path: /hyperw-assets
            pathType: Prefix
          - backend:
              service:
                name: option-index
                port:
                  number: 9029
            path: /service-option-index
            pathType: Prefix
          - backend:
              service:
                name: option-ws
                port:
                  number: 9090
            path: /ws
            pathType: Prefix
          - backend:
              service:
                name: hyperw-system
                port:
                  number: 9028
            path: /hyperw-system
            pathType: Prefix
          - backend:
              service:
                name: legend-index
                port:
                  number: 9026
            path: /public/web/kline/history
            pathType: Prefix
          - backend:
              service:
                name: legend-index
                port:
                  number: 9026
            path: /public/web/timeline/history
            pathType: Prefix
          - backend:
              service:
                name: option-ws
                port:
                  number: 9090
            path: /service-option-ws/ws
            pathType: Prefix
          - backend:
              service:
                name: hyperw-user
                port:
                  number: 9023
            path: /hyperw-user
            pathType: Prefix
          - backend:
              service:
                name: hyperw-agent
                port:
                  number: 9033
            path: /hyperw-agent
            pathType: Prefix
          - backend:
              service:
                name: hyperw-binary-option
                port:
                  number: 9044
            path: /binary-option
            pathType: Prefix
  tls:
    - hosts:
        - test.yunson.com
      secretName: yunson.com-ssl

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/149336.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Debian/Ubuntu 安装 NodeJS【详细步骤】

文章目录 NodeSource 简介Debian/Ubuntu 安装 NodeJS第 1 步:进入 jenkins 容器第 2 步:下载和导入 NodeSource第 3 步:创建 deb 仓库第 4 步:安装 NodeJS第 5 步:卸载NodeJS参考👉 背景:在 Docker 中安装了 Jenkins,Jenkins 镜像为 Debian 11 bullseye。 👉 目标:…

ubuntu 18.04安裝QT+PCL+VTK+Opencv

资源 qt5.14.1:qt5.14.1.run opencv4.5.5:opecv4.5.5压缩包 1.国内换中科大源,加快下载速度 cd /etc/apt/ sudo gedit sources.list 替换成如下内容 deb https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse deb-src https://mirro…

DM8数据守护集群安装部署_手动切换

一.安装前准备 1.1 硬件环境建议 数据守护集群安装部署前需要额外注意网络环境和磁盘 IO 配置情况,其他环境配置项建议请参考安装前准备工作。 1.1.1 网络环境 心跳网络对 mal 通讯系统的影响非常大,如果网络丢包或者延迟较大,则会严重影…

【蓝桥杯选拔赛真题21】C++行李运费 第十二届蓝桥杯青少年创意编程大赛C++编程选拔赛真题解析

C/C++行李运费 第十二届蓝桥杯青少年创意编程大赛C++选拔赛真题 一、题目要求 1、编程实现 乘坐飞机时,行李超出规定重量后,会对行李进行托运且收取托运费。 以下是某航空公司行李托运的收费标准:“行李重量在 20 公斤内(含 20)按照每公斤 10 元收取费用,超过 20 公斤的…

解锁数据潜力:为什么你应该考虑使用向量数据库

文章目录 前言什么是向量和向量数据库使用示例Amazon OpenSearch Serverless向量引擎总结 前言 根据DC调查数据显示,全球在A1技术和服务上的支出2023年将达到1540亿美元,到2026年将超过3000亿美元。其中,向量数据库为AI的开发、增强内容生成…

jQuery使用echarts循环插入图表

目录 jQuery动态循环插入echarts图表 y轴显示最大值和最小值 x轴只显示两个值&#xff0c;开始日期和结束日期 jQuery动态循环插入echarts图表 html .center_img_list 是我们循环数据的地方 <div class"center_img shadow"><div class"center_img_b…

盘点30个Python树莓派源码Python爱好者不容错过

盘点30个Python树莓派源码Python爱好者不容错过 学习知识费力气&#xff0c;收集整理更不易。 知识付费甚欢喜&#xff0c;为咱码农谋福利。 链接&#xff1a;https://pan.baidu.com/s/1LA4cLunntKW3qO5aok3xAQ?pwd8888 提取码&#xff1a;8888 项目名称 PiCar-raspber…

业务连续性:确保稳健运营的关键战略

在今天的快节奏商业环境中&#xff0c;保障业务连续性是企业成功的重要保障。业务连续性不仅仅是关于应对自然灾害或技术故障&#xff0c;更是一项战略&#xff0c;涉及组织的整体准备、规划和应对能力&#xff0c;以确保在各种情况下业务的稳健运营。 一、业务连续性的定义 业…

Mybatis-Plus条件构造器QueryWrapper

Mybatis-Plus条件构造器QueryWrapper 1、条件构造器关系介绍 介绍 &#xff1a; 上图绿色框为抽象类 蓝色框为正常类&#xff0c;可创建对象 黄色箭头指向为父子类关系&#xff0c;箭头指向为父类 wapper介绍 &#xff1a; Wrapper &#xff1a; 条件构造抽象类&#xff0…

matplotlib绘图

介绍 在官网上有更多种类的图型的绘制方法 matpoltlib中文官方文档&#xff1a;例子_Matplotlib 中文网 matpoltlib英文官方文档&#xff1a;Examples — Matplotlib 3.8.1 documentation 分类 一、折线图 1、要实现的功能&#xff1a; 2、实例&#xff1a; # 导入包 from…

C# Socket通信从入门到精通(10)——如何检测两台电脑之间的网络是否通畅

前言: 我们在完成了socket通信程序开发以后,并且IP地址也设置好以后,可以先通过一些手段来测试两台电脑之间的网络是否通畅,如果确认了网络通畅以后,我们再测试我们编写的Socket程序。 1、同时按下键盘的windows键+"R"键,如下图: 下面两张图是两种键盘的情…

【luckfox】3、计算重量差

前言 本章结合之前的hx711驱动&#xff0c;实现读取质量&#xff0c;记录时间及剩余质量并存入csv文件&#xff0c;计算质量差并总计。 代码 luckfox-pico\project\app\test_app\hx711\hx711_app_addtime.c #include <stdio.h> #include <stdlib.h> #include &…

故障演练的关键要素及重要性

故障演练是一种有计划的、模拟真实生产环境故障的活动。通过故意引入故障、模拟系统组件失效或模拟其他异常条件&#xff0c;团队可以观察并评估系统在这些情况下的反应。这有助于发现潜在的问题、改进应急响应和提高系统整体的可用性。 一、故障演练的关键要素 计划性&#xf…

今年跳槽成功测试工程师原来是掌握了这3个“潜规则”

随着金九银十逐渐进入尾声&#xff0c;还在观望机会的朋友们已经开始焦躁&#xff1a;“为什么我投的简历还没有回音&#xff1f;要不要趁现在裸辞好好找工作&#xff1f;” “金九银十”作为人们常说的传统“升职加薪”的黄金季节&#xff0c;也是许多人跳槽的理想时机。然而…

基于消息队列+多进程编写的银行模拟系统

银行模拟系统 概述客户端 client.c服务端 serve.c开户 enroll.c存款 save.c转账 transfer.c取款 take.cmakefile文件 概述 该案例大体过程为&#xff0c;服务器先启动&#xff0c;初始化消息队列和信号&#xff0c;用多线程技术启动开户、存钱、转账、取钱模块&#xff0c;并且…

人力项目框架解析新增修改方法

在迁移项目但是遇到了一些问题&#xff0c;迁移项目的时候发现项目的整体框架很有趣&#xff0c;但是苦于项目框架太大了&#xff0c;竟然只能完整迁移&#xff0c;做不到部分迁移&#xff0c;于是我也只能从一半的角度来进行解释整个项目。 雇员 我们雇员这个为对象讲解一下…

软件测试项目案例哪里找?【银行/教育/商城/金融/等等....】

项目一&#xff1a;ShopNC商城 项目概况&#xff1a; ShopNC商城是一个电子商务B2C电商平台系统&#xff0c;功能强大&#xff0c;安全便捷。适合企业及个人快速构建个性化网上商城。 包含PCIOS客户端Adroid客户端微商城&#xff0c;系统PC后台是基于ThinkPHP MVC构架开发的跨…

一个用于操作Excel文件的.NET开源库

推荐一个高性能、跨平台的操作Excel文件的.NET开源库。 01 项目简介 ClosedXML是一个.NET第三方开源库&#xff0c;支持读取、操作和写入Excel 2007 (.xlsx&#xff0c; .xlsm)文件&#xff0c;是基于OpenXML封装的&#xff0c;让开发人员无需了解OpenXML API底层API&#xf…

阿里云今年服务器是真便宜,看看哪些云服务器值得买!

2023年双十一&#xff0c;阿里云推出了一项令人惊喜的独家优惠活动&#xff01;在这次活动中&#xff0c;阿里云开放了老用户购买权限&#xff0c;以超低的价格购买云服务器ECS经济型e实例。这款服务器配置了2核2G内存、3M固定带宽和40G ESSD entry系统盘。而且&#xff0c;更棒…

Playwright测试自动化工具

作者观点&#xff1a;很长时间以来&#xff0c;Selenium是QA工程师寻求测试自动化解决方案的首选测试框架。它能够测试任何浏览器&#xff08;这在IE浏览器的统治时期尤其重要&#xff09;和任何平台。然而&#xff0c;现在看来&#xff0c;那个时代已经过去了。 今天&#xf…