【问题标题】:Grunt Deployment with Git使用 Git 进行 Grunt 部署
【发布时间】:2015-04-06 23:24:49
【问题描述】:

我不知道这是否是问这个问题的合适地方,但是当涉及到 grunt 和部署时,我正在为“最佳实践”而苦苦挣扎。我的团队使用 bitbucket 来托管 repos 和 rackspace 作为服务器。

我使用 grunt 将我的网站构建成静态文件(将 ejs/less 编译成静态 html/css)。我有一个负责监视任务的 grunt dev 和负责所有优化/缩小等的 grunt prod。

目前的部署过程是:

1) 咕噜声

2) git commit / git push

3) 在bitbucket中提交pull request,将代码合并到master中

4) ssh 进入服务器和 git pull。

这可以确保我在服务器上的任何内容都是 git 提交并且已经过审查。我遇到的问题之一是有时我忘记在提交之前运行 grunt prod ,然后最终得到一个未优化的站点。

我已经研究过使用 ssh deploy 方法,基本上是在运行 grunt prod 后通过 FTP 传输文件。这将消除必须通过 ssh 进入服务器并知道命令的步骤。我担心这种方法最终可能会与 git 不同步并避免代码审查/拉取请求的步骤。

我认为我正处于正确做事的风口浪尖,但我觉得我一定错过了什么!

有什么建议吗?谢谢

【问题讨论】:

  • 我坚信可分发文件应该不受版本控制。您是否考虑过翻转事情并仅将 source 文件提交到 Git,然后使用 Grunt 作为部署工具来检查、构建和部署您的文件?这样一来,您的整个部署管道都是自动化的,不会错过任何步骤或提交错误的文件。
  • 感谢@AntP 的快速回复!我已经考虑过了,但我无法弄清楚如何正确地做到这一点。您能否详细说明您的建议?

标签: git deployment gruntjs web-deployment


【解决方案1】:

关于这个

[能够]消除必须通过 ssh 进入服务器并知道命令的步骤

Bit bucket 支持 POST 提交钩子,更多信息在这里:

基本上,当您提交到 bitbucket 存储库时,bitbucket 会向您选择的 URL 发出 HTTP 请求(带有包含有关您提交的信息的有效负载)。
你有一个脚本,例如PHP 或您使用的任何服务器端语言,当 URL 被命中时触发,然后运行您的 git pull 或您想要的任何命令。

这里是该过程的深入指南 http://jonathannicol.com/blog/2013/11/19/automated-git-deployments-from-bitbucket/

通过 FTP 传输文件

这可能非常困难和缓慢,即您将如何跟踪哪些文件已更改?您将如何处理删除本地项目文件夹中的文件,然后使用这些删除更新远程?

为此,我会使用 rsync,这是一个出色的同步工具。

我知道这不是一个完整的解决方案,也不能解决忘记运行grunt prod 的问题,但希望它可能对您有所帮助。

【讨论】:

    猜你喜欢
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 2012-06-03
    • 1970-01-01
    相关资源
    最近更新 更多