Purpose
主要是希望可以在 
git push 時,去觸發遠端伺服器的repo做更新。Environment
Local machine: OS X 10.11.5
Remote machine: CentOS Linux release 7.2.1511 (Core)
Requirement tools:
- git
 - python and pip
 - Git-Auto-Deploy
 
Setting
由於 
Git-Auto-Deploy 這個沒有 yum repo 可以使用,所以就按照原作者的建議,使用 repository 的方式來做安裝。
Remote machine:
git clone https://github.com/olipo186/Git-Auto-Deploy.git
cd Git-Auto-Deploy
使用 
pip 來安裝相依性套件sudo pip install -r requirements.txt
複製設定檔,並做修改,確認 
pidfilepath 路徑是可以被寫入的cp config.json.sample config.json
下列是可以用的參數表,請依照自已的需求做設定
| Command line option | Environment variable | Config attribute | Description | 
|---|---|---|---|
| –daemon-mode (-d) | GAD_DAEMON_MODE | Run in background (daemon mode) | |
| –quiet (-q) | GAD_QUIET | Supress console output | |
| –config (-c)  | GAD_CONFIG | Custom configuration file | |
| –pid-file  | GAD_PID_FILE | pidfilepath | Specify a custom pid file | 
| –log-file  | GAD_LOG_FILE | logfilepath | Specify a log file | 
| –host  | GAD_HOST | host | Address to bind to | 
| –port  | GAD_PORT | port | Port to bind to | 
Sample config
使用json格式來撰寫設定檔
{
  "pidfilepath": "~/.gitautodeploy.pid",  # 預設在家目錄,可自行定義
  "logfilepath": "~/gitautodeploy.log",   # 預設在家目錄,可自行定義,並且要有寫入的權限
  "host": "0.0.0.0",                      # 綁定主機IP,也是listen IP
  "port": 8001,                           # 要開的Port
  # 定義所有repo可輸出的訊息,可以是二個特別的指令或是可被執行的script
  # [0] = The pre-deploy script.
  # [1] = The post-deploy script.
  "global_deploy": [
    "echo Deploy started!",               
    "echo Deploy completed!"
  ],
  # 預設是NOSET(all detail),建議用INFO
  "log-level": "INFO",
  # 要設定的repositories
  "repositories": [
    {
      # Git Repo的連結網址
      "url": "http://xxx.xxx.xxx/9527.git",
      # 要 check out 的分支,通常會是master
      "branch": "master",
      # 遠端使用的名稱,可用 git remote 查詢
      "remote": "origin",
      # 要部署的路徑,第一次執行時,會自動幫你clone下來,如果repo被刪除時,就無法正常去做更新,只執行deploy script,修複的方法是重新再執行一次程式就可以解決了。
      "path": "/path/to/repo",
      # 要執行的指令,如果 path 有設定,就只會執行pull
      "deploy": "echo deploying"
    }
  ]
}
還有二個參數我還沒用到, 
filters 和 secret-token。Start Git-Auto-Deploy manually using
啟用 
Git-Auto-Deploy 有三種方法- command-line
 
python gitautodeploy --config config.json
- crontab
 
@reboot /usr/bin/python /path/to/Git-Auto-Deploy/gitautodeploy --daemon-mode --quiet --config /path/to/git-auto-deploy.conf.json
- daemon
 
cp platforms/linux/initfiles/systemd/git-auto-deploy.service /etc/systemd/system
編輯 
git-auto-deploy.service,以下是我的範本[Unit]
Description=GitAutoDeploy
[Service]
User=root
Group=root
WorkingDirectory=/opt/Git-Auto-Deploy/
ExecStart=/usr/bin/python /opt/Git-Auto-Deploy/gitautodeploy --daemon-mode --config config.json
[Install]
WantedBy=multi-user.target
接下來就把 
Git-Auto-Deploy 複製到 /opt 下,並修改資料夾權限cp -Rp ~/Git-Auto-Deploy  /opt
chown -R root:root /opt/Git-Auto-Deploy
Reload Daemons
systemctl daemon-reload
systemctl start git-auto-deploy
systemctl enable gitautodeploy
Gitlab webhook
- Go to your repository -> Settings -> Web hooks
 - In “URL”, enter your hostname and port (your-host:8001)
 - Hit “Add Web Hook”
 
參考資料: