鍍金池/ 問(wèn)答/Linux/ 在linux服務(wù)器上用git管理上傳代碼

在linux服務(wù)器上用git管理上傳代碼

我現(xiàn)在一直是用ftp來(lái)上傳文件,但感覺(jué)很麻煩。先換成git

請(qǐng)問(wèn)如何應(yīng)該如何操作呢

回答
編輯回答
遲月

來(lái)個(gè)簡(jiǎn)單的利用gitlab 的webhook實(shí)現(xiàn)代碼在服務(wù)器部署。

  1. 首先需要先裝一個(gè)gitlab
  2. 在gitlab 配置好你項(xiàng)目的倉(cāng)庫(kù)之后,配置一個(gè)簡(jiǎn)單的鉤子域名,如:test.com/hook.php(用PHP舉個(gè)栗子), test.com 這臺(tái)服務(wù)器必須是你要上傳代碼的服務(wù)器(不是也可以,實(shí)現(xiàn)方式有很多)

圖片描述

  1. 上傳服務(wù)器ssh 公鑰id_rsa.pub 到你gitlab 的deploy keys
  2. 接下來(lái)在test.com 這臺(tái)服務(wù)器上配置hook.php的web訪問(wèn)目錄,確保能正常運(yùn)行test.com/hook.php:

代碼可以如下:

<?php
//git webhook 自動(dòng)部署腳本
////項(xiàng)目存放物理路徑
$path = "/data/githook/project/"; 
//日志目錄
$log_path = "/data/logs/git_log/";
$log_file = 'git-webhook.'.date('Y-m-d').'.log';
$requestBody = file_get_contents("php://input");
if (empty($requestBody)) {
die('send fail');
}
$content = json_decode($requestBody, true);
//若是主分支且提交數(shù)大于0, 那master分支舉例
if ($content['ref']=='refs/heads/master' && $content['total_commits_count']>0) {
$res = shell_exec("cd {$path} && git reset --hard origin/master && git pull -f origin master 2>&1");
$res_log = '-------------------------'.PHP_EOL;
$res_log .= $content['user_name'] . ' 在' . date('Y-m-d H:i:s') . '向' . $content['repository']['name'] . '項(xiàng)目的' . $content['ref'] . '分支push了' . $content['total_commits_count'] . '個(gè)commit:' . PHP_EOL;
$res_log .= $res.PHP_EOL;
file_put_contents($log_path.$log_file, $res_log, FILE_APPEND);//追加寫(xiě)入
echo 'send suc';
}else{
echo 'send failed';
}
die();

如果覺(jué)得太復(fù)雜,或者我寫(xiě)得不好。GitLab Runner 或許更適合你。 瀏覽問(wèn)題的時(shí)候無(wú)意中看到了就寫(xiě)了下?

2017年9月15日 09:56