首页 > 编程语言 >node实现自动部署

node实现自动部署

时间:2024-09-24 17:46:12浏览次数:7  
标签:node const log 部署 自动 branch error console 分支

node实现自动部署

环境准备

# 安装依赖 版本号最好一致
"chalk": "^4.1.2",
"child_process": "^1.0.2",

目录

src/config
init.js [用于初始化执行,获取当前操作的分支]
publish.js [发布所需核心命令]

代码

 /* init.js */
 /* 开发分支直接发布脚本 npm run daily */
const { exec, spawn } = require('child_process');
const chalk = require('chalk');

exec('git rev-parse --abbrev-ref HEAD', (error, stdout, stderr) => {
  if (error) {
    console.error(`获取当前分支名出错: ${error}`);
    return;
  }
  if (stderr) {
    console.error(`取当前分支名输出错误: ${stderr}`);
    return;
  }

  // 使用当前分支名作为参数调用publish.js
  const currentBranch = stdout.trim();
  console.log(chalk.bgYellowBright(`当前开发分支是: ${currentBranch}`));
  const publishScript = spawn('node', ['config/publish.js', currentBranch]);

  publishScript.stdout.on('data', (data) => {
    console.log(chalk.greenBright(`日志:`, chalk.yellowBright(data)));
  });

  publishScript.stderr.on('data', (data) => {
    console.error(chalk.redBright(`错误日志: ${data}`));
  });

  publishScript.on('close', (code) => {
    console.log(chalk.yellowBright(`进程结束 ${code}`));
  });
});
 /* publish.js */
 const { exec } = require('child_process');

const branchName = process.argv[2]; // 获取命令行传入的分支名
if (!branchName) {
    console.error('Please provide the branch name as an argument.');
    process.exit(1);
}

/* 日常环境分支 */
const daily_branch = 'daily/0.0.999';

/* 线上环境分支 */
const prod_branch = 'master';

/* 当前操作分支 */
const current_branch = prod_branch;

// 定义需要执行的Git命令
const commands = [
    // 提交代码
    `npm run commit`,

    // 切换到daily分支
    `git checkout ${current_branch}`,

    // 拉取最新代码,确保本地分支是最新的
    `git pull origin ${current_branch}`,

    // 合并开发分支到daily分支
    `git merge ${branchName} --no-ff -m "Merge ${branchName} into ${current_branch}"`,

    // 推送到远程daily分支
    `git push origin ${current_branch}`,

    // 执行发布命令,假设这里目前执行的是 代码格式化命令到时候可替换
    `npm  run  formate`,

    // 切换回开发分支
    `git checkout ${branchName}`
];
/* 取消提交代码时报的错 */
const ignore_error = ['npm run commit'];

// 顺序执行Git命令
function executeCommands(index = 0) {
    if (index === commands.length) {
        console.log(`发布完成✅`);
        return;
    }
    const command = commands[index];
    console.log(`准备执行第${index + 1}个命令: ${command}`);
    exec(command, (error, stdout, stderr) => {
        if (error) {
            console.error(`错误的命令: ${command}`);
            if (ignore_error.indexOf(command) === -1) {
                console.error(`错误的输出: ${stderr}`);
                console.error(`错误日志: ${error}`);
                process.exit(1);
            } else {
                console.log(`已忽略`);
            }
        }
        console.log(`准第${index + 1}个命令执行完成

标签:node,const,log,部署,自动,branch,error,console,分支
From: https://www.cnblogs.com/gjzsa/p/18429718

相关文章

  • 【自动驾驶】决策规划算法(一)决策规划仿真平台搭建 | Matlab + Prescan + Carsim 联合
    写在前面:......
  • 数控纵切自动车床
    数控纵切自动车床,作为现代机械加工领域的重要设备,集成了高精度、高效率与自动化等诸多优势。下面,我将从多个方面为您详细介绍这一先进设备。‌一、设备概述‌数控纵切自动车床,顾名思义,是一种结合了数控技术与纵切加工原理的自动化机床。它通过预设的程序控制,实现工件的自动上......
  • 基于Node.js+vue基于Springboot恒生蔬菜库存管理系统(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着农业现代化进程的加速和消费者对食品新鲜度、安全性的日益重视,蔬菜库存管理成为了农产品供应链中至关重要的一环。传统的手工记录与管理方式已难以满足......
  • 基于Node.js+vue智能宠物监控系统(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着城市化进程的加速和人们生活质量的提升,宠物已成为许多家庭的重要成员。然而,现代生活节奏的加快使得许多宠物主人在日常照顾宠物时面临时间上的挑战。传......
  • 基于Node.js+vue基于java的学生宿舍管理系统(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着高等教育规模的不断扩大,学生宿舍作为校园生活的重要组成部分,其管理效率与服务质量直接关系到学生的日常生活体验及学校的整体管理水平。传统的学生宿舍......
  • YOLOv5:Android手机NCNN部署
    视频链接:YOLOv5:Android手机NCNN部署_哔哩哔哩_bilibili 《YOLOv5:Android手机NCNN部署》课程致力于帮助学生实战YOLOv5目标检测算法在Android手机上的NCNN部署。常心老师将手把手带领大家从0开始搭建YOLOv5+Android+NCNN环境,带领大家排坑、避坑、填坑。本课程将进行环境搭......
  • KubeSphere的三种部署方式
    KubeSphere参考官方网站:什么是KubeSphere概述KubeSphere是在Kubernetes之上构建的面向云原生应用的分布式操作系统,完全开源,支持多云与多集群管理,提供全栈的IT自动化运维能力,简化企业的DevOps工作流。它的架构可以非常方便地使第三方应用与云原生生态组件进行即插......
  • springboot项目打包部署到linux运行经验:
    打包:1.mvn:clean2.mvn:package 生成的snapshop-jar包在target下。部署(采用idea自带的ftp) 1.idea的tools-deployment中配置虚拟机的连接,包括用户名,密码,端口 2.配置idea的mapping文件目录映射(随便写),就可以打开虚拟机目录了 3.将idea的target下生产的jar包直接拖动到虚......
  • 阿里云函数计算自定义域名的SSL证书免费全自动申请及部署
    ####(本人现在只做了证书部署,自动任务可以执行但是所生成的记录值没办法自动在阿里云的域名解析列表中更新,因此查到这篇文章,但发现太麻烦……又感觉以后一定会用到,所以先转载保存记录一下,原文地址:https://developer.aliyun.com/article/1475347)阿里云函数计算大大简化了开发部......
  • MySQL深度探索:掌握触发器自动化与精细用户权限管理,提升数据库效能与安全
     作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢大家的关注 座右铭:   云端筑梦,数据为翼,探索无限可能,引领云计算新纪元 个人主页:团儿.-CSDN博客目录前言:触发器(Triggers):用户权限(UserPermissions):一.触发器1.MySQL触发器简介2.引发触发器执行的事件,......