在使用 git 管理 Web 項目,以及其它 Server 項目時,我們需要自動部署功能。
在推送後,能將代碼部署到工程目錄,並執行一些部署命令。
這就用到了 git 爲我們提供的 post-update 鉤子。
将脚本放在 git-dir/hooks
目录下,命名为 post-update
,并增加可执行权限。
當遠端 git 倉庫對本倉庫發起推送,並推送成功後,該文件將被執行。
你可以用任何你喜歡的腳本語言 bash、python、ruby、julia、PHP、Node.js……
當然,編譯型語言也行,只是不如腳本語言那样,便于阅读和修改。
#例 0.
對於簡單的部署腳本,使用 bash 即可,例如:
該腳本會將最新的 tag 檢出到工程目錄,是个常用的用例。
#例 1.
這是一个 Laravel 项目的例子,使用 PHP 编写:
此例中,我们检查了被推送的分支,并对不同的分支进行不同的操作。
当 test 分支被推送,将该分支检出到测试目录,并应用新增的数据库迁移文件。
当 migrate 分支被推送,将测试环境中的数据库刷新。
当 product 分支被推送,将最新 tag 检出到生产目录,并处理数据库迁移、视图和路由的缓存。
#例 2.
這是本博客项目的部署脚本:
與上面兩個例子使用 CLI 不同,本例使用 API 來操作 git 倉庫和構建項目。
這看起來略顯麻煩,但優勢也是明顯的。API 往往可以做得比 CLI 更多,也更加靈活。
這裏使用的 libgit2 就是非常棒 git API。它涵蓋了 git 的所有功能,支持十餘種編程語言或環境。
並且它還是 git 的官方推薦 API 庫。
以上是我在項目中使用的不同風格的 git post-update 例子。
分享代碼,更是分享思路,希望對帶來參考價值。