Git Post-receive钩子与工作树的一部分

rob*_*don 17 git deployment wordpress githooks

我想使用git将网站部署到测试服务器.我的网站是一个用gulp构建的wordpress主题,存储库看起来像

theme.git/
-- gulpfile.js
-- src/
-- build/
Run Code Online (Sandbox Code Playgroud)

我按照这里这里解释的步骤,在服务器上设置了一个裸存储库,配置git工作树的位置,并写一个post-receive挂钩来检查repo到那个位置.

问题是我只想将build/文件夹移动或复制到服务器上的位置.我唯一的想法就是写一个post-receive hook将repo拉到一个工作树位置(因为我觉得我读过那个裸的repos通常都没有工作树),然后cp是build文件夹到wp-content/themes/

它似乎不必要地复杂,所以我想知道是否有更有效/更常见的方式来解决它.谢谢!

小智 5

git如此广泛地用于部署的方法似乎有点奇怪,主要是因为 git 是主要的源代码管理系统,而不是部署工具。确实,您可以使用 git hooks 做许多奇怪的事情,但出于某种原因,我觉得这些东西会再次困扰您。

通常我会建议您使用某种持续集成工具来完成这项工作。我可以自己使用的一种可能的工作流程是

  1. 将您的主题文件存储在GitHub的公共存储库中。它是免费的,您的主题源代码中可能没有什么大秘密,作为额外的好处,您甚至可以开源您的主题。
  2. 使用Travis CI为您的存储库设置 CI 作业。您基本上可以在云中获得一个免费的构建机器实例,并且您可以在构建之前或之后进行各种操作。你可以例如。在gulp build那里运行(或任何您的任务名称),因此您根本不必将build目录存储在 git repo 中。
  3. 在 Travisafter_success挂钩中,您可以将构建目录复制到目标服务器,例如使用scp. 这是一个使用 FTP 做同样事情的例子。Travis 支持对敏感数据进行加密,因此您不必担心(至少如此)将用户名和密码存储在 git 存储库中。

当您想在每次向 git 存储库提交内容时部署构建时,该流程非常有用。 顺便说一句,当你第一次使用它时,真的感觉很神奇:“我刚刚做了这个git push,现在我的服务器上已经有了变化。”

但是,您提到要将代码部署到测试服务器。确实,CI 工具(例如 Travis)可用于维护不同部署步骤之间的流程,其中许多是测试服务器。大型项目的一个示例流程可能是

development -> tests passing? -> release -> tests passing? -> integration -> tests passing? -> staging -> tests passing? -> production

...其中流程可以使用 CI 工具部分或完全自动化。

但是,您听起来好像在您的情况下部署构建是一种一次性的事情,有时您只想手动完成。(如果我误解了你,我很抱歉。)对于这些一次性任务,使用 shell 脚本或任务管理工具更合适。

您提到您已经在使用gulp. 这是一个非常方便的工具,特别是因为您可以轻松地组合不同的“任务流”。您可以有一个用于构建主题 ( gulp build) 的任务和用于测试服务器部署 ( gulp deploy-test) 的另一个build任务,这只是通过一个将文件复制到测试服务器的附加步骤来扩展任务。gulp-scp看起来像一个很好的任务插件(虽然我自己没有使用它,它只是谷歌的第一个搜索结果)。如果这不起作用,您可以随时scp使用gulp-shell或类似工具手动调用。

你甚至可以参数化的部署任务,所以你可以这样做: gulp deploy --testgulp deploy --production

好了,这是您在devops 中的第一堂课。如果软件项目中的这种任务自动化听起来很有趣,那么有很多东西需要学习。