减少 Git 工作流中的步骤



>我有以下设置

[dev laptop] -- git push --> [gitlab]
|
git pull
|
V
[prod server]

上述结果为以下工作流

  1. dev-laptop$ git push gitlab
  2. dev-laptop$ ssh prod-server
  3. prod-server$ cd app
  4. prod-server$ git pull gitlab
  5. prod-server$ pm2 restart app
  6. prod-server$ exit
  7. 在开发和生产之间dev-laptop$ rsync图像和其他二进制文件

如何减少上述步骤的数量?以下是我的想法:

  1. 在两者之间摆脱GitHub,以便我直接从我的开发笔记本电脑git push生产服务器。但我不知道该怎么做,或者是否可以做到。

  2. GitLab上设置了一些git hooks,所以当我git push它时,在post-receive上,GitHubgit push(es)生产服务器的更改。并且,在重新启动pm2的生产服务器上添加一个post-receivegit 挂钩。当然,我也不太知道如何做到这一点。

更新:理想情况下,因为我是这个项目中唯一的开发人员,我希望有一个这样的工作流程

[dev laptop] -- git push --> [prod server]

以上,加上上面描述的一些git hooks,将大大简化我的生活。当然,危险在于我不再有中央存储库,所以万一我的开发笔记本电脑生产服务器出现故障,我没有备份。但这是我可以选择忍受的危险。

更新2:拥有中央存储库的安全性非常有吸引力。

要做的事情:

1( 首先让您的产品部署一个步骤。 我见过很多生产站点使用git pull进行更新,但我认为这是一个错误 - 它要求它们以某种方式成为生产存储库中的冲突,从而导致问题。 而是编写一个脚本来执行类似

mkdir deploydir-next
git archive master https://gitlab.com/me/myproject.git | tar -x -C /deploydir-next
pm2 stop app
mv deploydir deploydir-prev ; mv deploydir-next deploydir
pm2 start app
(cd deploydir-prev ; tar czv ../rollback_`date +%Y%m%d%H%M%S`.tar.gz . )
rm -rf deploydir-prev

这会关闭它足够长的时间,以便非常快速地切换到新代码,该代码派生自当前主头的快照。

2( 现在,您的生产服务器上有一个deploy脚本,您可以选择:

  1. 准备好部署时手动运行它
  2. 在计划的升级时间定期运行它(周一凌晨 5 点很好,因为它可以让您整周修复任何中断,而不会占用您的周末(
  3. 通过(安全!(GitLab Webhook自动运行它

最新更新