php與Git下基於webhook的自動化部署

2022-02-16 02:53:22 字數 2183 閱讀 5758

2023年第一篇文章,沒啥技術含量,權當筆記

我們一般都會用git或者svn來管理我們的**

每次**更新後還要手動的去把伺服器上的**也更新一遍

專案小了還好 專案大了著實浪費時間

要是伺服器上的**也能像git那樣增量更新就好了

今天就說說如何通過webhook的形式來讓伺服器自動拉取我們push的**

現在的git伺服器一般都會有個webhook服務

什麼意思呢?

就是我們在執行了push、merge等一系列的操作的時候

git伺服器會傳送乙個請求到我們指定的url

並且會把此次動作的相關資料也傳送過去

這裡我們使用開源中國的碼雲演示

在幫助文件中可以看到

當我們發生push之類的操作的時候

git伺服器會像我們指定的url傳送以下資料

, 

"repository": ,

"commits": [

}],

"total_commits_count": 1,

"commits_more_than_ten": false,

"project": ,

"hook_name": "push_hooks",

"password": "pwd"

}

於是乎,我們就可以拿這些資料來做做文章了

1.首先我們需要為www使用者建立乙個ssh金鑰

切換到www使用者下並生成乙個rsa金鑰

su - www

ssh-keygen -t rsa

金鑰一般生成在 /var/www/.ssh/ 這個路徑下

檔名為 id_rsa

建立乙個可供git伺服器通知的頁面

**的建立這裡不再敷述

檔案內容如下

<?php

//git webhook 自動部署指令碼

//專案存放物理路徑

$path = "你的專案部署路徑";

$requestbody = file_get_contents("php://input");

if (empty($requestbody))

$content = json_decode($requestbody, true);

//若是主分支且提交數大於0

if ($content['ref']=='refs/heads/master' && $content['total_commits_count']>0) && git pull 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;

}echo '很棒:'.date('y-m-d h:i:s');

以上**相信都可以看懂

git傳送過來的資料相當豐富

我們可以用這些資料來做些過濾來決定是否需要更新伺服器上的本地**

建立**倉庫

建立方法這裡不在敷述

2. 新增ssh金鑰

在專案管理中把上面步驟第一步中得到的ssh金鑰新增到倉庫的部署金鑰中

這樣我們的web伺服器就有了拉取**的許可權

3.新增hook路徑

同樣在專案管理中新增webhook鏈結

這裡可以新增乙個密碼,我偷懶這裡沒加

需要加的話可以在hook檔案中新增乙個驗證

可以防止被惡意訪問

最後我們需要在我們的部署目錄先把git初始化一次

su - www

git clone git倉庫位址 專案部署位址

然後我們往git倉庫中提交一次**更新

稍等一下

如果一切正常的話我們的專案目錄就會自動拉取你剛才提交的**了

在hook路徑中也有log記錄

不需要的話可以把**注釋掉

PHP下 與 區別

三個要點 先來個樣例 if 1 1 else他的輸出結果將是true,此時你一定覺得沒毛病,php時弱型別的語言,1就是等於 1 但是我們通常不建議這麼做,原因請看下面的例項 if 1 true else if test 0 else注釋 gettype var 能夠以字串的形式返回var的資料型別...

Mac OS X 下基於SSH的git伺服器的搭建

前言 在mac os x下面,通過虛擬機器搭建了windows xp和ubuntu 10.10,由於ubuntu的vmware tools安裝後不能使用,所以想在這三個系統中同步檔案,就選用了git,並且基於ssh 下面是我部署這個環境的一些步驟 1.在mac os x下面安裝git sudo po...

linux下安裝apache與php

存至 home xx目錄,xx是自建資料夾,我建了乙個wj的資料夾。命令列表 安裝apache至 usr local apache 並配置apache支援dso方式 存至 home wj目錄 命令列表 cd home wj tar zxvf php 5.0.4.tar.gz mv php 5.0.4...