• node创建GIT分支,并修改代码提交


    核心代码,脚本utils

    // defined
    const spawn = require('child_process').spawn;
    const runCommand = function(cmd, args, options) {
            return new Promise((resolve, rejct) => {
                const spwan = spawn(
                    cmd,
                    args,
                    Object.assign(
                        {
                            cwd: process.cwd(),
                           // stdio: 'inhert' 定义inhert的话下面无法获取到stdout等输出
                            shell: true
                        },
                        options
                    )
                );
                spwan.stdout.on('data', (data) => {
                    logger.info(`------stdout--------
    ${data}
    ------stdout--------`);
                });
                spwan.stderr.on('data', (data) => {
                    logger.info(`------stderr--------
    ${data}
    ------stderr--------`);
                });
                spwan.on('exit', () => {
                    resolve();
                })
            })
        }
    // usage
    await utils.runCommand('git', [`checkout -b ${branchName}`], { cwd: GIT_ROOT })
    

    需要注意的点

    1. 了解端和端的差异,确保自己使用的shell脚本命令被当前的宿主环境支持,前端一般就是(mac 的bash 环境)和liunx的脚本环境,一般也是bash
    2. git等命令,liunx宿主环境不一定存在,如果不存在记得安装
    3. 关于liunx软件的安装,不同平台有一定差异,当前使用的centOS平台是使用 yum install packageName 即可。

    遇到的难点

    1. 如何clone项目, 采用的是
        const gitUri = `http:/${username}:${password}@gitlab.com/fe/${protal.gitName}.git`
    
    1. 如何获取npm包的gzp地址
        # 获取此脚本的输出
        npm view ${packageName}@${packageVersion} dist.tarball
    
    • 项目上线后,git在执行项目时因没有文件权限无法创建
        fatal: Unable to create '/home/xxx/react-fifteen-build/.git/index.lock': Permission denied
    

    此问题的原因是登录服务器的用户我和真实的当前node进程归属用户不同,实际上node运行遇到的并不是这个问题

    1. 设置git的用户名
      输出错误日志后,没有设置git提交的用户名
        *** Please tell me who you are.
        Run
    
            git config --global user.email "you@example.com"
            git config --global user.name "Your Name"
    
        to set your account's default identity.
        Omit --global to set the identity only in this repository.
    
        fatal: empty ident name (for <tomcat@l-cms2.fe.f.cn2>) not allowed
    

    在服务器上执行命令后,再次测试,发现仍然报错,原因是因为git config --global user.email 是在 当前用户的根文件夹下创建.gitconfig文件来存储用户信息,具体内容如下

    [user]
    	email = xxx@qq.com
    	name = xxx
    

    而当前node进程的用户,和当前登录的服务器的用户不一致。造成node进程的归属用户根文件夹并不存在此配置。

    • 解决方案
      1. 复制当前用户的.gitconfig文件到node进程的归属用户文件夹下
          cd /home
          cp user1/.gitconfig user2/
      
      1. node代码中定义当前git项目的用户名
          await utils.runCommand('git', ['config user.name "xxx"'], { cwd: GIT_ROOT })
          await utils.runCommand('git', ['config user.email "xxx"'], { cwd: GIT_ROOT })
      
    1. 如何查看当前node进程的归属用户名
          ps aux | grep node
          # 输出
          第一项就是用户名
    

  • 相关阅读:
    Android Studio的代码没错,运行时logcat会出现红色语句解决方法
    541. Reverse String II
    Android Studio快速自动生成findViewById
    你真的了解android的layout_weight属性吗?
    572. Subtree of Another Tree
    441. Arranging Coins(可用二分搜索)
    67. Add Binary
    58. Length of Last Word
    724. Find Pivot Index
    我爱java系列--【加密算法的介绍】
  • 原文地址:https://www.cnblogs.com/clearfix/p/12855808.html
Copyright © 2020-2023  润新知