碼云雙分支(master/develop)自動(dòng)部署生產(chǎn)服/測(cè)試服

一般項(xiàng)目的開(kāi)發(fā)測(cè)試流程,都會(huì)有測(cè)試服、生產(chǎn)服的角色聪廉,碼云代碼托管中創(chuàng)建雙分支,讓其master分支對(duì)應(yīng)生產(chǎn)服干签,develop分支對(duì)應(yīng)測(cè)試服容劳,分別實(shí)現(xiàn)自動(dòng)更新部署,現(xiàn)在分兩種情況留量,分別給出相應(yīng)的webhooks源代碼(PHP),實(shí)現(xiàn)本自動(dòng)更新的基礎(chǔ)是在相應(yīng)的服務(wù)器上已經(jīng)摘取了對(duì)應(yīng)的分支版本并且配置了部署公鑰等基礎(chǔ)操作可岂,如不了解稚茅,請(qǐng)自行搜索峰锁,或者參考我的另一篇文章《項(xiàng)目創(chuàng)建部署全流程--碼云創(chuàng)建項(xiàng)目飒货、部署webhooks服務(wù)器自動(dòng)更新》

一、測(cè)試站點(diǎn)與正式站點(diǎn)都部署在同一服務(wù)器上

這種情況比較簡(jiǎn)單扣墩,每次請(qǐng)求根據(jù)Push操作的分支來(lái)判斷相應(yīng)更新測(cè)試站點(diǎn)或者正式站點(diǎn)的項(xiàng)目文件即可呻惕,參考源代碼如下

<?php
/*
* 碼云webhooks自動(dòng)更新程序
* 根據(jù)不同分支來(lái)自動(dòng)更新正式站/測(cè)試站
* $logdir 日志存放目錄
* $name 站點(diǎn)標(biāo)識(shí)字符盲泛,多站點(diǎn)方便區(qū)分日志
* $password 碼云設(shè)置的訪問(wèn)密碼
* $wwwroot 正式站點(diǎn)目錄
* $testdir 測(cè)試站點(diǎn)目錄
* author: 王小滔
* date: 2019-11-23
*/

$logdir = "/www/wwwroot/webhook/logs/";
$name = 'project_name';
$password = 'your_password';
$wwwroot = '/www/wwwroot/project_name';
$testdir = '/www/wwwroot/project_name_test';

$json = file_get_contents("php://input");
$data = json_decode($json,true);
if ($data['password'] != $password) {
    die('Password id error!');
}

if (isset($data['ref'])&& $data['total_commits_count'] > 0) {
    if ($data['ref'] == 'refs/heads/master') {
        $dir = $wwwroot;
        $branch = 'master';
        $site = '正式';
    } else {
        $dir = $testdir;
        $branch = 'develop';
        $site = '測(cè)試';
    }
    $res = PHP_EOL . "pull start ---------------------------------------------" . PHP_EOL;
    $res .= shell_exec("cd {$dir} && git pull origin {$branch} 2<&1 ");
    $res_log = '------------------------------------------------------------' . PHP_EOL;
    $res_log .= $site . '站點(diǎn)更新村视,目錄:' . $dir . PHP_EOL;
    $res_log .= $data['user_name'] . ' 在 ' . date('Y-m-d H:i:s'). ' 向 ' . $data['repository']['name'] . ' 項(xiàng)目的 ' .                    $data['ref'] . ' 分支push了 ' . $data['total_commits_count'] . ' 個(gè)commit:' . $data['commits']['message'];
    $res_log .= $res . PHP_EOL;
    $res_log .= "pull end -----------------------------------------------------" . PHP_EOL;
    file_put_contents($logdir . $name . "_" . date('Ymd'). ".txt",$res_log,FILE_APPEND);
}

二、測(cè)試站點(diǎn)與正式站點(diǎn)分別部署在測(cè)試服與生產(chǎn)服

這種情況,其實(shí)也不復(fù)雜质况,只不過(guò)需要事先分別創(chuàng)建兩個(gè)服務(wù)器的部署公鑰添加到碼云囤捻,然后在webhooks添加兩個(gè)鉤子文件網(wǎng)址即可,以下是測(cè)試服與生產(chǎn)服分別的對(duì)應(yīng)源代碼

1蝎土、測(cè)試服webhook源代碼(對(duì)應(yīng)develop分支)

<?php
/*
* 碼云webhooks自動(dòng)更新程序
* 根據(jù)不同分支來(lái)自動(dòng)更新正式站/測(cè)試站
* $logdir 日志存放目錄
* $name 站點(diǎn)標(biāo)識(shí)字符视哑,多站點(diǎn)方便區(qū)分日志
* $password 碼云設(shè)置的訪問(wèn)密碼
* $testdir 測(cè)試站點(diǎn)目錄
* author: 王小滔
* date: 2019-11-25
*/

$logdir = "/www/wwwroot/webhook/logs/";
$name = 'project_name';
$password = 'your_password';
$testdir = '/www/wwwroot/project_name_test';

$json = file_get_contents("php://input");
$data = json_decode($json,true);
if ($data['password'] != $password) {
    die('Password id error!');
}

if (isset($data['ref'])&& $data['total_commits_count'] > 0) {
    if ($data['ref'] == 'refs/heads/develop') {
      $res = PHP_EOL . "pull start ---------------------------------------------" . PHP_EOL;
      $res .= shell_exec("cd {$testdir} && git pull origin develop 2<&1 ");
      $res_log = '------------------------------------------------------------' . PHP_EOL;
      $res_log .= '測(cè)試站點(diǎn)更新,目錄:' . $testdir . PHP_EOL;
      $res_log .= $data['user_name'] . ' 在 ' . date('Y-m-d H:i:s'). ' 向 ' . $data['repository']['name'] . ' 項(xiàng)目的 ' .                      $data['ref'] . ' 分支push了 ' . $data['total_commits_count'] . ' 個(gè)commit:' . $data['commits']['message'];
      $res_log .= $res . PHP_EOL;
      $res_log .= "pull end -----------------------------------------------------" . PHP_EOL;
      file_put_contents($logdir . $name . "_" . date('Ymd'). ".txt",$res_log,FILE_APPEND);
    }
}

2誊涯、生產(chǎn)服webhook源代碼(對(duì)應(yīng)master分支)

<?php
/*
* 碼云webhooks自動(dòng)更新程序
* 根據(jù)不同分支來(lái)自動(dòng)更新正式站/測(cè)試站
* $logdir 日志存放目錄
* $name 站點(diǎn)標(biāo)識(shí)字符挡毅,多站點(diǎn)方便區(qū)分日志
* $password 碼云設(shè)置的訪問(wèn)密碼
* $testdir 測(cè)試站點(diǎn)目錄
* author: 王小滔
* date: 2019-11-25
*/

$logdir = "/www/wwwroot/webhook/logs/";
$name = 'project_name';
$password = 'your_password';
$wwwroot = '/www/wwwroot/project_name';

$json = file_get_contents("php://input");
$data = json_decode($json,true);
if ($data['password'] != $password) {
    die('Password id error!');
}

if (isset($data['ref'])&& $data['total_commits_count'] > 0) {
    if ($data['ref'] == 'refs/heads/master') {
      $res = PHP_EOL . "pull start ---------------------------------------------" . PHP_EOL;
      $res .= shell_exec("cd {$wwwroot} && git pull origin master 2<&1 ");
      $res_log = '------------------------------------------------------------' . PHP_EOL;
      $res_log .= '正式站點(diǎn)更新,目錄:' . $wwwroot . PHP_EOL;
      $res_log .= $data['user_name'] . ' 在 ' . date('Y-m-d H:i:s'). ' 向 ' . $data['repository']['name'] . ' 項(xiàng)目的 ' .                      $data['ref'] . ' 分支push了 ' . $data['total_commits_count'] . ' 個(gè)commit:' . $data['commits']['message'];
      $res_log .= $res . PHP_EOL;
      $res_log .= "pull end -----------------------------------------------------" . PHP_EOL;
      file_put_contents($logdir . $name . "_" . date('Ymd'). ".txt",$res_log,FILE_APPEND);
    }
}

OK暴构,就是這么簡(jiǎn)單跪呈,希望對(duì)大家有幫助,如果還有什么問(wèn)題取逾,歡迎隨時(shí)與我交流耗绿!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市菌赖,隨后出現(xiàn)的幾起案子缭乘,更是在濱河造成了極大的恐慌,老刑警劉巖琉用,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件堕绩,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡邑时,警方通過(guò)查閱死者的電腦和手機(jī)奴紧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)晶丘,“玉大人黍氮,你說(shuō)我怎么就攤上這事∏掣。” “怎么了沫浆?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)滚秩。 經(jīng)常有香客問(wèn)我专执,道長(zhǎng),這世上最難降的妖魔是什么郁油? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任本股,我火速辦了婚禮攀痊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拄显。我一直安慰自己苟径,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布躬审。 她就那樣靜靜地躺著棘街,像睡著了一般。 火紅的嫁衣襯著肌膚如雪盒件。 梳的紋絲不亂的頭發(fā)上蹬碧,一...
    開(kāi)封第一講書(shū)人閱讀 51,573評(píng)論 1 305
  • 那天舱禽,我揣著相機(jī)與錄音炒刁,去河邊找鬼。 笑死誊稚,一個(gè)胖子當(dāng)著我的面吹牛翔始,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播里伯,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼城瞎,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了疾瓮?” 一聲冷哼從身側(cè)響起脖镀,我...
    開(kāi)封第一講書(shū)人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎狼电,沒(méi)想到半個(gè)月后蜒灰,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肩碟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年强窖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片削祈。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡翅溺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出髓抑,到底是詐尸還是另有隱情咙崎,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布吨拍,位于F島的核電站褪猛,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏密末。R本人自食惡果不足惜握爷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一跛璧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧新啼,春花似錦追城、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至物舒,卻和暖如春色洞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背冠胯。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工火诸, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人荠察。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓置蜀,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親悉盆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子盯荤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容