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 anyparameters {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-frontlabels:k8s.kuboard.cn/layer: webk8s.kuboard.cn/name: option-frontname: option-frontnamespace: testresourceVersion: '38871139'
spec:progressDeadlineSeconds: 600replicas: 1revisionHistoryLimit: 10selector:matchLabels:k8s.kuboard.cn/name: option-frontstrategy:rollingUpdate:maxSurge: 25%maxUnavailable: 25%type: RollingUpdatetemplate:metadata:annotations:kubectl.kubernetes.io/restartedAt: '2023-11-15T19:51:15+08:00'creationTimestamp: nulllabels:k8s.kuboard.cn/name: option-frontpod-template-hash: 645b77b9cspec:containers:- env:- name: TZvalue: Asia/Shanghaiimage: 'harbor.yunson.com/test/option-front:sit'imagePullPolicy: Alwaysname: option-frontports:- containerPort: 3000name: msag7protocol: TCPresources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: FilednsPolicy: ClusterFirstimagePullSecrets:- name: acr-secret- name: harbor-secretrestartPolicy: AlwaysschedulerName: default-schedulersecurityContext: {}terminationGracePeriodSeconds: 30---
apiVersion: v1
kind: Service
metadata:annotations: {}labels:k8s.kuboard.cn/layer: webk8s.kuboard.cn/name: option-frontname: option-frontnamespace: bikingresourceVersion: '31418671'
spec:internalTrafficPolicy: ClusteripFamilies:- IPv4ipFamilyPolicy: SingleStackports:- name: ef5znmport: 3000protocol: TCPtargetPort: 3000selector:k8s.kuboard.cn/name: option-frontsessionAffinity: Nonetype: ClusterIP---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:annotations: {}labels:k8s.kuboard.cn/layer: webk8s.kuboard.cn/name: option-frontname: option-frontnamespace: bikingresourceVersion: '38696977'
spec:ingressClassName: biking-ingressrules:- host: option-test.cuiwjrpcvi.comhttp:paths:- backend:service:name: option-frontport:number: 3000path: /pathType: Prefix- backend:service:name: hyperw-optionport:number: 9024path: /service-option-corepathType: Prefix- backend:service:name: hyperw-assetsport:number: 9027path: /hyperw-assetspathType: Prefix- backend:service:name: option-indexport:number: 9029path: /service-option-indexpathType: Prefix- backend:service:name: option-wsport:number: 9090path: /wspathType: Prefix- backend:service:name: hyperw-systemport:number: 9028path: /hyperw-systempathType: Prefix- backend:service:name: legend-indexport:number: 9026path: /public/web/kline/historypathType: Prefix- backend:service:name: legend-indexport:number: 9026path: /public/web/timeline/historypathType: Prefix- backend:service:name: option-wsport:number: 9090path: /service-option-ws/wspathType: Prefix- backend:service:name: hyperw-userport:number: 9023path: /hyperw-userpathType: Prefix- backend:service:name: hyperw-agentport:number: 9033path: /hyperw-agentpathType: Prefix- backend:service:name: hyperw-binary-optionport:number: 9044path: /binary-optionpathType: Prefixtls:- hosts:- test.yunson.comsecretName: yunson.com-ssl

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

视频封装格式

FLV(Flash Video) FLV封装格式 Tag Data分为Audio,Video,Script三种 TS(Transport Stream)传输流 TS文件分为三层,(倒叙更好理解) TS层:在PES层基础上加入…

Leetcode——岛屿的最大面积

1. 题目链接:695. 岛屿的最大面积 2. 题目描述: 给你一个大小为 m x n 的二进制矩阵 grid 。 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都…

Moto edge s pro手机 WIFI和蓝牙连接不上 解决方法分享

2021年12月入手一台Moto Edge S Pro 12256版,看着性价比很高,越用越垃圾。屏幕显示没有vivo亮丽/APP图标很丑/屏幕上一点点水就失灵/拍照片边缘是模糊的/系统几乎不更新。 以上都可以忍受,但是: 用一年不到,蓝牙不能…

pycharm使用

1、注释多行:ctril/ 2、解除多行注释:ctril/

【人工智能Ⅰ】7-KNN 决策树

【人工智能Ⅰ】7-KNN & 决策树 7-1 KNN(K near neighbour) 思想:一个样本与数据集中的k个样本最相似,若这k个样本大多数属于某类别,则该个样本也属于这类别 距离度量 样本相似性用欧氏距离定义 L p ( x i , x…

kicad源代码研究:symbol properties窗口中为SCH_SYMBOL添加或删除一个sch_field

向grid中添加一个sch_field FIELDS_GRID_TABLE<SCH_FIELD>* m_fields; WX_GRID* m_fieldsGrid; simEnableFieldRow (int) m_fields->size(); m_fields->emplace_back( VECTOR2I( 0, 0 ), simEnableFieldRow, m_symbol, SIM_ENABLE_FIELD ); // notify the grid w…

前端 vue 面试题 (一)

文章目录 v-if,v-show差别v-for和v-if虚拟dom解决什么问题vue的data为什么返回函数不返回对象比较vue&#xff0c;reactvue双向绑定原理vue虚拟dom 的diff算法vue 虚拟dom的diff算法的时间复杂度vue2与vue3的区别vue数据缓存&#xff0c;避免重复计算单页应用怎么跨页面传参vue…

在MySQL上实现间隔5分钟汇总取数及相关字符串、时间处理方法实践

1. 实践案例需求描述 查询mysql数据库&#xff0c;按每5分钟分组获取3个小时内的电量数据&#xff0c;参考SQL语句如下。 select sd.RecordTime RecordTime, sd.sddl sddl,sd.pvdl ,cap.capdl capdl from ((SELECT CONCAT(DATE_FORMAT(RecordTime,%Y-%m-%d %H:), LPAD(floor(…

Ubuntu20.04 通过nmcli命令查看网卡状态为unmanaged

问题描述&#xff1a; 通过下述指令查看网卡状态为 "unmanaged" nmcli dev status 解决方法&#xff1a; cd /usr/lib/NetworkManager/conf.d/ sudo mv 10-globally-managed-devices.conf 10-globally-managed-devices.conf.bak sudo cp 10-globally-managed-devic…

Java 设计模式——中介者模式

目录 1.概述2.结构3.案例实现3.1.抽象中介类3.2.抽象同事类3.3.具体同事类3.4.具体中介类3.5.测试 4.优缺点5.使用场景 1.概述 &#xff08;1&#xff09;一般来说&#xff0c;同事类之间的关系是比较复杂的&#xff0c;多个同事类之间互相关联时&#xff0c;他们之间的关系会…

Python爬取股票交易数据代码示例及可视化展示。

文章目录 前言一、开发环境二、第三方模块三、爬虫案例步骤四、爬虫程序全部代码1.分析网页2.导入模块3.请求数据4.解析数据5.翻页6.保存数据 五、实现效果六、数据可视化全部代码1.导入数据2.读取数据3.可视化图表4.效果展示关于Python技术储备一、Python所有方向的学习路线二…

Windows本地配置带GPU的Pytorch环境

首先需要安装并配置好Anaconda环境&#xff0c;安装教程教程随便找一个就好。 第一步&#xff1a;安装好之后创建conda虚拟环境&#xff1a; conda create -n your_env_name pythonx.x 第二步&#xff1a;安装需要版本的pytorch&#xff1a;pytorch下载链接 cu100/torch-1.2…

VUE基础的一些总结

首先推荐观看VUE官方文档 目录 创建一个 Vue 应用 要创建一个 Vue 应用&#xff0c;你需要按照以下步骤操作&#xff1a; 步骤 1&#xff1a;安装 Node.js 和 npm 确保你的计算机上已经安装了 Node.js。你可以在 Node.js 官网 上下载并安装它。安装完成后&#xff0c;npm&…

算法之Eigen库

Eigen库是用于线性代数运算的C++模板库,提供了矩阵、向量、数值求解器等线性代数相关算法的实现。以下是Eigen库的一些基本用法示例: 1. 安装Eigen库 首先,你需要下载并安装Eigen库。你可以从Eigen的官方网站上获取最新版本:Eigen官方网站 2. 定义矩阵和向量: #includ…

sqlalchemy查询数据为空,查询范围对应的数据在数据库真实存在

记录一个开发过程遇到的小bug&#xff0c;构造些伪数据还原并解释。 """ 场景&#xff1a;传参触发了查询条件&#xff0c;数据库中是存在传参对应范围的数据&#xff0c;但是通过查询条件得到的查询结果为空 """ 入参场景一&#xff1a; start_…

修复img实际有正确的链接,但是不显示 (chrome 插件保存的html)--google镜像chatgpt

打开目标html文件 chrome 控制台 执行以下脚本 //删除侧边栏 $x("//div[idsidebar]")[0].remove();//修复img实际有正确的链接&#xff0c;但是不显示 (chrome 插件保存的html&#xff09; //img.data-savepage-src 复制到 img.src imgs$x("//img"); imgs…

小黑完成了最后一节健身课,顺利完成了跳绳比赛,乘飞机到达南京准备第二天领物资和南京城内闲逛的leetcode之旅:215. 数组中的第K个最大元素

小黑代码 class Solution:def findKthLargest(self, nums: List[int], k: int) -> int:# 数组长度n len(nums)nums list(map(lambda x:-x, nums))q []for i in range(n):heapq.heappush(q, nums[i])# 出堆target -1for i in range(k):target heapq.heappop(q)return -…

Java Web——TomcatWeb服务器

目录 1. 服务器概述 1.1. 服务器硬件 1.2. 服务器软件 2. Web服务器 2.1. Tomcat服务器 2.2. 简单的Web服务器使用 1. 服务器概述 服务器指的是网络环境下为客户机提供某种服务的专用计算机&#xff0c;服务器安装有网络操作系统和各种服务器的应用系统服务器的具有高速…

《向量数据库指南》——2023云栖大会现场,向量数据库Milvus Cloud成关注焦点

近期,广受关注的2023 云栖大会正式收官,来自全球各地的开发者集聚一堂,共同探索 AI 时代的更多可能性。 云栖大会是由阿里巴巴集团主办的科技盛宴,是中国最早的开发者创新展示平台。据悉,今年云栖大会的主题为“计算,为了无法计算的价值”,共吸引了全球 44 个国家和地区…

Qt DragDrop拖动与放置

本文章从属于 Qt实验室-CSDN博客系列 拖放操作包括两个动作&#xff1a;拖动(drag)和放下(drop或称为放置)。 拖动允许 对于要拖出的窗口或控件&#xff0c;要setDragEnabled(true) 对于要拖入的窗口或控件&#xff0c;要setAcceptDrops(true) 下面以一个具体的用例进行说…