webhook 自動部署代碼

前話: 通常狀況,本身在本地開發,代碼改動後要push放到線上去看效果,可是咱們還要到線上環境手動拉取代碼庫 git pull 下來, 一來一回太麻煩了。php

   如今用webhook就能夠實現本地開發,push代碼到GitHub上面時,線上自動同步更新的代碼,省事多了。linux

 

一、首先在GitHub或者碼雲這些代碼託管庫上面添加好本身的項目;git

 

二、把本地寫好的兩個文件上傳到代碼庫, sync.php 和 sync.sh ; (其實就是本地push後自動請求sync.php,   裏面執行 sync.sh, 最終就是執行 git pull 的命令)web

  sync.php:vim

<?php
  echo '進來了...';

  exec('sh sync.sh');

?>

     sync.sh: (我用的是默認的master分支,其它分支可本身定)bash

#!/bin/bash
/usr/bin/git pull origin master 

 

三、 vim /usr/local/php/etc/php.ini   # 找到 disable 刪除 exec(用 linux命令 /disable, 而後 按n 往下找),由於這個函數默認被禁用了ssh


       vim /etc/passwd                     # 將 www 的 /sbin/nologin 改成 /bin/bash , www設置爲登陸函數

 

四、由於,咱們的PHP執行實際上是使用的www用戶。默認都是www用戶,PHP中執行git也是使用www用戶。spa

   因此,在線上環境首先要 切換到 www 用戶(命令:su  www);3d

 

五、設置公鑰, 命令: ssh-keygen -t rsa -b 4096 -C "your_email@example.com", 這裏填寫本身的郵箱帳號,彈出:Enter file ... key (/home/www/.ssh/id_rsa):, 而後一直 Enter 就好,結束後會在 /home/www/.ssh 這個目錄下面生成一個公鑰文件 id_rsa.pub,打開復制內容到GitHub代碼庫,添加後公鑰管理那裏。

 

六、在 /home/wwwroot/目錄下面克隆出本身的項目,git clone git@XXX/test.git;

  若是執行報錯這種:

  The authenticity of host 'gitee.com (120.55.226.24)' can't be established.
  ECDSA key fingerprint is SHA256:FQGC9Kn/eye1W8icdBgrQp+KkGYoFgbVr17bmjey0Wc.
  ECDSA key fingerprint is MD5:27:e5:d3:f7:2a:9e:eb:6c:93:cd:1f:c1:47:a3:54:b1.
  Are you sure you want to continue connecting (yes/no)? yes
  Warning: Permanently added 'gitee.com,120.55.226.24' (ECDSA) to the list of known hosts.

   再執行一次克隆就好 git clone git@XXX/test.git;

 

七、給線上的 sync.php  和 sync.sh 加執行權限 ; chmod +x sync.php  ;  chmod +x sync.sh

 

八、上面第4點說到了執行的是www用戶,要讓www用戶免密碼執行git命令才能夠;

      經過 vim  /etc/sudoers  進去修改, 加入

www     ALL=NOPASSWD:/usr/bin/git

 

九、最後一步, 在你的項目裏添加webhook地址, http:XXX.com/sync.php 這種能夠訪問的, 就是訪問sync.php 這個文件,讓它去代碼庫自動拉取代碼。

    

 

這樣就能夠在本地開發, push上去後,線上代碼自動同步了。

另外,也能夠添加釘釘機器人來推送通知;

相關文章
相關標籤/搜索