php專案使用git的webhooks實現自動部署
阿新 • • 發佈:2020-12-01
## 前言
> 在專案開發中使用git進行程式碼的管理,每次完成更改上傳程式碼後,還需要登入伺服器將程式碼拉取下來.現在git伺服器(gitee/gitlab/github)都會有Webhooks功能,以實現在向git倉庫推送/合併等時機讓伺服器自動拉取新程式碼.
## 流程說明
使用Webhooks後,整個上傳部署流程如下:
![使用webhook流程](https://zylwan.oss-cn-hangzhou.aliyuncs.com/upload/php_git_webhooks.png "使用webhook流程")
## 伺服器端操作
### webhook指令碼建立
關於推送的post資料格式,參考碼雲的《WebHook 推送資料格式說明》.根據這個引數格式編寫php的指令碼檔案如下:
```
0) {
$res = shell_exec("cd {$path} && git pull origin master 2>&1");//當前為www使用者
$res_log = '------------------------->'.PHP_EOL;
$res_log .= '使用者'. $content['user_name'] . ' 於' . date('Y-m-d H:i:s') . '向' . $content['repository']['name'] . '專案的' . $content['ref'] . '分支push了' . $content['total_commits_count'] . '個commit:' . PHP_EOL;
$res_log .= $res.PHP_EOL;
$x = file_put_contents("git_webhook_log.txt", $res_log, FILE_APPEND);//追加寫入日誌檔案
if ($x) {
echo 'true-';
} else {
echo 'false-';
}
}
echo 'done';
```
### 伺服器使用者設定
由於是通過url請求php編寫的指令碼執行操作,所以開啟nginx.conf檔案檢視執行使用者,預設為www,也可在任意php檔案中新增程式碼: `echo system("whoami");`,然後訪問檔案檢視php執行使用者.
確定使用者後,開啟`/etc/passwd`檔案檢視該使用者的資訊,如下:
```
www:x:1000:1000::/var/www:/bin/bash
```
其格式和具體含義如下:
> 使用者名稱:口令:使用者標識號:組標識號:註釋性描述:主目錄:登入Shell
其中要注意"主目錄"這一項,若後續操作提示該目錄不存在或錯誤,開啟此檔案修改.
接著依次執行下面三條命令:
```
su - www //切換到www使用者
ssh-keygen -t rsa -C "[email protected]" //以郵箱為名建立rsa金鑰
cat /var/www/.ssh/id_rsa.pub //檢視rsa公鑰並複製,.ssh所在目錄即上面所提"主目錄"
```
## git倉庫操作
### 配置部署公鑰
在碼雲上開啟專案倉庫,依次點選[管理]=>[部署公鑰管理]=>[新增公鑰].將上面複製的`id_rsa.pub`公鑰新增進來.完成後在伺服器上執行命令:
```
ssh -T [email protected]
```
首次使用會提示`the authenticity of host 'gitee.com...`需要輸入`yes`確認並新增主機到本機SSH可信列表.若返回 Hi XXX! You've successfully authenticated, but Gitee.com does not provide shell access. 內容,則證明新增成功.新增成功後,當前賬戶www就可以使用SSH協議對倉庫進行克隆/拉取等操作了.
### 新增webhook
在碼雲上開啟專案倉庫,依次點選[管理]=> [WebHooks]=>[新增],填寫webhook的php指令碼地址,如有需要填寫webhook密碼/金鑰(金鑰需要再新增驗籤),如下圖
![碼雲webhook新增](https://zylwan.oss-cn-hangzhou.aliyuncs.com/upload/git_webhookadd.png)
到此,完成配置,之後的push操作可在碼雲[WebHooks 管理]中檢視自動部署請求記錄資訊.也可檢視伺服器中的`git_webhook_log.txt`部署日誌(php指令碼中寫入,不需要可註釋掉).
---
個人網站地址: https://www.zhuyilong.xn--6qq986b3xl/tech/php_git_webhook.html