使用git hook 实现nodejs项目自动部署

wmliang00 2019-06-28

需求场景

自己写了个项目。为小程序提供后端。以前都是用nodejs自己写工具的。前阵子通过同事了解到 git 有一些 hook 可以帮我们做这些操作,更合理和方便。用了 git hook 可以实现提交代码之后自动在服务器上部署。而不用手动去做一些操作。所以就查阅学习了一波。

需求分析

实现上述需求大概思路是,在 push 代码的时候用回调一个脚本或者方法来执行一些部署的操作。其中可以用 git 的 post-receive 这个 hook 来实现 push 完的时候,调用 shell 脚本。
也可以用 git webhook 在 push 完成的时候调用一个接口。然后自己写个部署的工具,对外暴露一个部署接口,提供给 git webhook 来调用。
我自己用了 gogs。如果在界面中操作的话就是如下两张图:

使用git hook 实现nodejs项目自动部署

在项目的 Settings 中找到 webhooks ,然后输入对外的 payload url 即可。

或者在项目的 Settings 中找到 git hooks,然后编辑 post-receive

使用git hook 实现nodejs项目自动部署

然后,就出现了 shell 脚本输入的界面。

具体实现细节

梳理了大概的思路,下面就是做。虽然图形界面操作方便,但是经过查阅资料发现,直接在git项目中创建 git hooks 更方便。具体细节如下:
进入项目目录,找到 hooks 目录。然后看到如下目录结构

使用git hook 实现nodejs项目自动部署

默认可能不存在 post-receive 这个文件,我们可以复制一份 post-receive.sample 文件重命名为 post-receive。
然后再 post-receive 文件中写一些部署操作的 shell 脚本就可以了。
当前,我的项目是一个后端项目。所以首先,我们需要把本项目文件直接 clone 到服务器的一个目录下 命令如下:

sudo git --work-tree=/目标目录 --git-dir=/通常是.git结尾的项目目录 checkout -f

根据实际情况就改成自己的目录结构即可。
其次,我们需要 npm install 然后再 npm run build,而且,npm run build 还应该在 npm install 执行完毕之后再执行。所以命令如下:

npm install && npm run build

当然,如果我们需要使用 pm2 ,直接在 package.json 中定义 build script 如下即可:

使用git hook 实现nodejs项目自动部署

接着我们会发现,当前用户可能是git用户在调用 shell 脚本。所以我们要先切换用户。shell 里边切换用户怎么写呢?方法如下:

sudo su - root <<EOF
命令1;
命令2;
EOF

注意,su 后边有个 - ,不加这个短横线代表直接切换用户了。中间写我们要切换用户后执行的命令就可以了。
好了,贴出整个脚本来show一下:

使用git hook 实现nodejs项目自动部署

然后保存文件后,在本地提交下代码试一下,齐活,正常重新部署了。

其他

这个折腾的过程中,发现一些比较实用的 linux 命令,这里再强化下咯:

whoami 我是谁

whereis node 查找 node 在哪

相关推荐