一不小心手动实现了k8s的自动化构建

本文记录了手动实现k8s自动化部署的过程,包括从git仓库获取代码、执行npm install和npm build,以及将生成的静态文件复制到指定目录。通过控制台交互和js执行shell脚本实现,适用于多模块项目。虽然已实现基本功能,但仍有优化空间,如错误处理和嵌套模块识别。
摘要由CSDN通过智能技术生成

背景

由于公司需要对公司内部的软件需要对外部署,对于前端的部署,需要一套部署的方案。尝试了写了一个适配多模块可配置的部署脚本,本文对实现的过程进行一个记录。

目的

脚本采用的是node,前端同学的首选。脚本的目的就是实现k8s中的自动化部署中的部分功能

熟悉k8s的同学或许了解在k8s的自动构建过程中,大概实现了以下几个步骤

  • 从指定的代码仓库中获取代码
  • 执行npm i或者npm ci(如果项目依赖内网npm还需要在这之前设置一下内网镜像)
  • 执行npm build
  • 将生成的静态文件放在指定的文件内

我们的node脚本就需要实现以上功能即可。

实现过程

第一步,从指定的代码仓库中获取代码

从指定仓库获取代码,需要怎么指定。

我们平时克隆代码的时候执行的是git clone xxx,xxx就是指定的代码地址,如果我们模仿一下node index.js xxx,这样的话如果需要克隆多个后面就会很长,不太美观。

这里我选择通过写入配置文件的方式进行clone。并且提供两种clone方式。

1.给一个全量的仓库配置文件,通过手动选择其中的仓库进行clone。
2.创建一个默认的配置,对里面所有的git地址进行clone。

创建一个config.js和一个customeConfig.js文件

// config.js 全量仓库
export default [{url: 'https://github.com/yourProject1.git', // 代码地址modulesName: 'yourProject1', // 项目简称或者标识desc: '项目一' // 项目描述
},{url: 'https://github.com/yourProject2.git',modulesName: 'yourProject2', desc: '项目二'
},{url: 'https://github.com/yourProject3.git',modulesName: 'yourProject3', desc: '项目三'
},{url: 'https://github.com/yourProject4.git',modulesName: 'yourProject4', desc: '项目四'
}] 
// customConfig.js 不在全量仓库里面的地址,全部下载
export default [{url: 'https://github.com/yourProject1.git', // 代码地址modulesName: 'yourProject1', // 项目简称或者标识desc: '项目一' // 项目描述
},{url: 'https://github.com/yourProject2.git',modulesName: 'yourProject2', desc: '项目二'
}] 

使用者如果需要clone的仓库不在config.js里面,可以直接修改customConfig.js里面的文件。

我们还是分步骤实现

flowchart TD 
A[选择clone方式 chooseDownLoadType] --> B{选择项目clone?} 
B --是 选择config中的clone --> C[chooseGit] 
C --选择需要clone的仓库地址 --> E[downLoadGit]
B --否 根据customConfig中的clone ----> E[downLoadGit] 

根据上面流程图,我们需要实现三个方法

  • chooseDownLoadType(); // 选择克隆方式
  • chooseGit(); // 选择克隆仓库
  • downLoadGit(); // 实现git clone

Talking is cheap show me your code 话不多说直接实现代码吧

这里通过inquirer实现控制台的交互效果,具体使用方法可以查看npm官网的使用方法 www.npmjs.com/package/inq…

  • 实现chooseDownLoadType()
function chooseDownLoadType () {inquirer.prompt([{type: "list",name: "preset",message: "请选择克隆的方式",choices: ["选择项目clone", "根据customConfig配置clone"]}]).then(choice => {if(choice.preset === '选择项目clone') { // 按照config文件clonechooseGit(); // 选择git地址}else { // 按照customConfig文件配置downLoadGits = customConfig.map(res => res.url); // 收集地址downLoadGit(); // 下载git}})
} 
  • 实现chooseGit()
function chooseGit () {inquirer.prompt([{type: "checkbox",name: "gits",message: "请选择需要克隆的项目地址:",choices: config.map(res => {return {name: `${res.modulesName}_(${res.desc})`,...res}}),default: [] // 默认选中的git}]).then(choice => {// 收集地址choice.gits.forEach(git => {const moduleName = git.split("_")[0]; // 获取nameif(config.map(conf => conf.modulesName).includes(moduleName)) {downLoadGits.push(config.find(gitConf => gitConf.modulesName === moduleName).url);}})downLoadGit();})
} 

详细代码如下:

import { createRequire } from "module";
const require = createRequire(import.meta.url);
import inquirer from "inquirer";
import config from "./config.js";
import customConfig from "./customConfig.js";

let downLoadGits = [] // 收集需要clone的地址

function chooseDownLoadType () {inquirer.prompt([{type: "list",name: "preset",message: "请选择克隆的方式",choices: ["选择项目clone", "根据customConfig配置clone"]}]).then(choice &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值