序言
测试环境:ubantu14、window10
测试Git平台:coding.net
“了解一下”
- ①.
git pull
了解一下 - ②. Linux的SSH 了解一下
- ③. Git的SSH公钥 了解一下
一般自动部署,Git不用https,而是改为ssh。
因为自动部署是自动输入账号密码,自动完成部署方案
如果一定要用https,请如下操作,(即记住用户名和密码)
打开当前项目git配置文件‘config’
编辑[remote “origin”]这一项里的url
url = https://yourname:password@git.coding.net/yourusername/yourpro.git
要用到的
//部署用户公钥
ssh-keygen -t rsa -C "i@hyperdai.com"
//部署公钥
sudo -Hu www-data ssh-keygen -t rsa -C 'i@hyperdai.com'
//切换用户并克隆
sudo -Hu www-data git clone git@git.coding.net:XXX/XX.git /var/www/cms --depth=1
注:如果是www-data用户部署的公钥,应该去www-data用户的家目录去找.ssh文件夹下的id_rsa.pub
主要原理
Coding仓库处的webhook可以监控你当前项目的push和merge状态,如果你有push或merge请求,它会自动发送http post请求,你只要在它请求的url的文件内附脚本代码自动执行git pull操作即可。
Coding中webhook设置
服务器中Php代码布置
在网站根目录下,coding.php附如下代码
<?php
$token = '你的token';
$post_data_origin = @file_get_contents("php://input");
$post_data = json_decode($post_data_origin, true);
if ($post_data['token'] != $token) {
header("HTTP/1.1 403 Forbidden");
die();
}
if ($post_data['ref'] != "refs/heads/master" && $post_data['merge_request']['target_branch'] != "master") {
header("HTTP/1.1 417 Expectation Failed");
die();
}
$pwd = '你的网站根目录';
$command = 'cd ' . $pwd . ' && git pull';
$output = shell_exec($command);
if ($output == null) {
header("HTTP/1.1 501 Not Implemented");
die();
} else {
$remove_cache_command = 'rm -rf ' . $pwd . '_run_temp/*';
shell_exec($remove_cache_command);
}
print $output;
参考
[注:欢迎大佬驾临指出错误]