跳转至

一键部署dev项目

一、背景

随着部署在devcloud项目的增多,比如研发平台、监控工具、自动化测试,以及更新迭代的频繁,之前的部署方案效率愈显低效,需要手动打包 => 登录服务器 => 解压缩到部署目录,后端项目还要pm2 restart,或者登录服务器后执行git pull,比较麻烦。

现开发了一个小工具,可以快速部署前端项目、Node.js后端项目。

二、思想

整体思路是:

  1. 使用bash脚本上传项目压缩包
  2. 在服务器上监控某目录,当该目录新增某项目的文件时,就部署该项目。

    • 前端项目直接解压到部署目录
    • 后端项目解压后,依次执行npm installpm2 restart

这里面最重要的是规范化,包括打包方式、前后端项目命名、压缩包名称、前端项目打包后路径、上传目录、部署目录等。

目前的规范包括:

  • 打包方式
    • gzip,打包命令是tar -zcvf,对应的解压命令是tar -zxvf
  • 前后端项目命名规范
    • 前端项目为xxx-frontend,后端项目为xxx-backend。不要跟着不规范的仓库名称走。
  • 压缩包命名规范
    • 项目名称加.tar.gz
  • 前端项目本地打包路径
    • dist/project/xxx
  • 上传目录
    • /root/watch-to-deploy-dir
  • 部署目录
    • /root/deploy-dir

三、使用指引

新项目接入需要增加1个文件,.env.local,并将其加入.gitignore中。其内容包含项目名称、服务器地址、服务器密码,如:

1
2
3
DEPLOY_PROJECT=xxx
HOST_NAME=1.1.1.1
HOST_PWD=xxx

然后安装deploy-bash:

$ npm install deploy-bash --save-dev

然后在package.json的script中增加这样一条命令:

1
2
3
{
  "deploy": "deploy 1"
}

部署的时候执行npm run deploy就行了。

如果后端项目之前没有配置ecosystem.config.js的话,需要新增一下。

前端项目可以参考pmd-auto-test-frontend,后端项目可以参考pmd-auto-test-svr

四、deploy-bash

deploy-bash是部署脚本,使用方式是:

1
2
3
4
5
# 参数依次为 isBackEndProject、targetDir
$ npx deploy 1 /root

# targetDir可以为空:
$ npx deploy 1
  • 第一个参数表示是否为后端项目,1: 是,0: 否,默认为0。
  • 第二个参数表示上传目录,如果不传,则用默认逻辑。

五、知识点

编写过程中遇到一些小知识点,这里记录下。

1、 新 publish 的库还没同步到公司的镜像的时候,用:

$ npm install deploy-bash@latest --registry=https://registry.npmjs.org/

2、 tar 默认不打包隐藏文件,也就是以点开头的。

3、 不要开启 git clean -xdf,不然之前的 npm installnode_modules 会被清除。

git clean -n
// 是一次 clean 的演习, 告诉你哪些文件会被删除,不会真的删除

git clean -f
// 删除当前目录下所有没有 track 过的文件
// 不会删除 .gitignore 文件里面指定的文件夹和文件, 不管这些文件有没有被 track 过

git clean -f <path>
// 删除指定路径下的没有被 track 过的文件

git clean -df
// 删除当前目录下没有被 track 过的文件和文件夹

git clean -xf
// 删除当前目录下所有没有 track 过的文件.
// 不管是否是 .gitignore 文件里面指定的文件夹和文件

git clean
// 对于刚编译过的项目也非常有用
// 如, 他能轻易删除掉编译后生成的 .o 和 .exe 等文件. 这个在打包要发布一个 release 的时候非常有用

git reset --hard
git clean -df
git status
// 运行后, 工作目录和缓存区回到最近一次 commit 时候一摸一样的状态。
// 此时建议运行 git status,会告诉你这是一个干净的工作目录, 又是一个新的开始了!

4、 bash字符串赋值时提供一个默认值,var=${str-epr},比如:

1
2
3
4
5
6
7
function main() {
  var=${1-hello}
  echo $var
}

main # hello
main world # world

5、 发布包的 package.jsonfiles中填 "./dist/index.js" 不生效,要填 "dist/index.js"。 6、 Git的多用户配置

(1) 配置文件

我们常用的配置文件有两个:

  • 全局级别的配置文件:~/.gitconfig
  • 仓库级别的配置文件:git 仓库中的.git/config

除了上面这两个,还有两个不怎么常用的配置文件:

  • 系统级别的配置文件:/etc/gitconfig
  • 工作区级别的配置文件:git 仓库中的.git/config.worktree

这四个配置文件的优先级由高至低为: 工作区(.git/config.worktree) > 仓库(.git/config) > 用户(~/.gitconfig) > 系统(/etc/gitconfig

(2) 修改配置

命令行修改 git 配置的命令如下:

git config [--local|--global|--system] [key] [value]

举个例子,修改全局级别的用户信息:

git config --global user.name "您的名字"
git config --global user.email "您的邮箱"

设置的时候默认是--local。

查看配置的命令是:

git config [--local|--global|--system] [key]

查看配置的是按照优先级依次查找。

(3) 多用户配置

最简单的方式是在~/.gitconfig中增加1条对自己工作区的配置:

[user]
    name = youName
    email = youEmail@example.com

## 私人项目
[includeIf "gitdir:path/to/you/dir/"]
    path = ~/.gitconfig_self

## 工作项目
[includeIf "gitdir:path/to/work/dir/"]
    path = ~/.gitconfig_work

~/.gitconfig_self中内容:

1
2
3
[user]
    name = yourname-self
    email = yourname-self@gmail.com

~/.gitconfig_work中内容:

1
2
3
[user]
    name = yourname-work
    email = yourname-work@yourCompanyName.com

(4) 多用户配置的作用

  • 参与Github开源项目
  • Github的Contributions Graph需要提交的用户邮箱与登录邮箱一致

(5) 参考