webhook 自動部署代碼


前話: 一般情況,自己在本地開發,代碼改動后要push放到線上去看效果,但是我們還要到線上環境手動拉取代碼庫 git pull 下來, 一來一回太麻煩了。

   現在用webhook就可以實現本地開發,push代碼到GitHub上面時,線上自動同步更新的代碼,省事多了。

 

1、首先在GitHub或者碼雲這些代碼托管庫上面添加好自己的項目;

 

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

  sync.php:

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

  exec('sh sync.sh');

?>

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

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

 

3、 vim /usr/local/php/etc/php.ini   # 找到 disable 刪除 exec(用 linux命令 /disable, 然后 按n 往下找),因為這個函數默認被禁用了


       vim /etc/passwd                     # 將 www 的 /sbin/nologin 改為 /bin/bash , www設置為登錄

 

4、因為,我們的PHP執行其實是使用的www用戶。默認都是www用戶,PHP中執行git也是使用www用戶。

   所以,在線上環境首先要 切換到 www 用戶(命令:su  www);

 

5、設置公鑰, 命令: 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代碼庫,添加后公鑰管理那里。

 

6、在 /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;

 

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

 

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

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

www     ALL=NOPASSWD:/usr/bin/git

 

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

    

 

這樣就可以在本地開發, push上去后,線上代碼自動同步了。

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM