git利用post-receive自動化部署

要求

實現git push 直接完成代碼部署到服務器的目錄php

實現方式

利用git的hooks中的post-receive來實現代碼提交完成以後的動做。將倉庫指定一個--work-tree而後進行檢出操做checkout --forcegit

目錄結構

我本身的項目結構是這樣的,每個倉庫對應一個項目,例如public/wx項目對應repo/wx.git倉庫web

.
├── public
│   └── wx // 這是咱們的web代碼部署目錄
│       ├── index.php
│       ├── test2.php
│       ├── test3.php
│       └── test.php
└── repo // 這個是咱們的倉庫目錄
    └── wx.git // 這個對應wx項目的倉庫
        ├── branches
        ├── config
        ├── description
        ├── HEAD
        ├── hooks // post-receive鉤子代碼寫在這裏面
        ├── index
        ├── info
        ├── objects
        └── refs

再看下hooks文件目錄服務器

.
├── applypatch-msg.sample
├── commit-msg.sample
├── post-commit.sample
├── post-receive
├── post-receive.sample
├── post-update.sample
├── pre-applypatch.sample
├── pre-commit.sample
├── prepare-commit-msg.sample
├── pre-rebase.sample
└── update.sample

咱們將post-receive.sample複製一份post-receive,而且編寫代碼以下app

# 指定個人代碼檢出目錄
DIR=/www/public/wx
git --work-tree=${DIR} clean -fd
# 直接強制檢出
git --work-tree=${DIR} checkout --force

如何生成目錄

上面看到的repo目錄中的wx.git其實是一個裸倉庫,咱們用下面的命令來生成這樣一個倉庫。ssh

cd /www/repo
git init --bare wx.git

對於代碼部署目錄和倉庫咱們已經經過post-receive進行了關聯了,由於咱們一旦將代碼push到倉庫,那麼會自動檢出到publish/wx目錄下。post

遠程部署

在本地電腦上,咱們添加遠程倉庫測試

git init
git remote add origin root@xxx.xxx.xxx.xxx:/www/repo/wx.git

這個時候咱們添加了遠程倉庫,那麼咱們來測試下push操做code

touch index.php
git add .
git commit -m 'test'
git push

可能會提示一個--set-upstream,直接執行下就行了。執行完以後咱們登錄服務器,會發現文件已經出如今public/wx/index.phpip

注意點

  1. 若是咱們沒有配置ssh免密碼登錄的話,咱們須要在push代碼的時候輸入密碼
  2. 若是咱們添加的遠程倉庫不是root@xxx.xxx.xx.xx,例如是abc@xx.xx.xx.xx,那麼咱們要確保abc用戶對wx.git目錄下的文件有777權限。

新增倉庫

  1. 須要登錄遠程服務器進行初始化repo_name.git倉庫
  2. 須要手動建立public/repo_name文件夾,而且修改權限爲777
  3. 須要從新編寫hooks/post-recieve文件,修改裏面的DIR路徑爲public/repo_name
相關文章
相關標籤/搜索