唯品秀前端博客
当前位置: 首页 > GitHub项目代码提交后自动同步部署到线上服务器

GitHub项目代码提交后自动同步部署到线上服务器

2019-09-06 分类:首页 作者:管理员 阅读(171)

很抱歉网站傍晚岩机3个多小时。因为最近看到有瓜娃子在我面前耍帅,说他的项目都不用手动更新就可以直接上线,只要把代码提交到仓库即可,听到这话你能忍么?我忍不了。。。于是我就用脚趾头想了下,大概猜到其原理无非就是提交到git仓库后触发某个监听机制,如果监听代码有更新,通知线上服务器执行脚本拉取代码,我想大概就做这么件事,事实也正是如此,于是傍晚一直通过博客线上服务器直接捣鼓,导致那么一会儿没完全捣鼓好,就岩机了下,好尴尬。。。下面以github项目来讲解具体怎么实现。

找对对应项目仓库

首先我现在GitHub上创建了一个项目,项目创建之后我们需要对该项目设置(Settings),里面有一选项Webhooks,点击进去

服务器配置

最后我们需要在服务器上创建PHP文件(git-webhook.php,可自定义名称)来接收,我博客后台是php语言所以用php实现,这不是重点,重点你要知道流程。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
//git webhook 自动部署脚本
$requestBody = file_get_contents("php://input"); //该方法可以接收post传过来的json字符串
if (empty($requestBody)) { //判断数据是不是空
    die('send fail');
}
$content = json_decode($requestBody, true); //数据转换
//若是主分支且提交数大于0
if ($content['ref'] == 'refs/heads/master') {
    //PHP函数执行git命令
    $res = shell_exec('cd /www/wwwroot/wp-content/themes/Art_Blog/
           && git reset --hard origin/master && git clean -f
           && git pull 2>&1 && git checkout master'
);

    $file = '/www/wwwroot/wp-content/themes/Art_Blog/dist'; //旧目录
    $newFile = '/www/wwwroot/wp-content/themes/Art_Blog/'; //新目录
    file_copy($file, $newFile);

    $res_log = '-------------------------' . PHP_EOL;
    $res_log.= ' 在' . date('Y-m-d H:i:s') . '向' . $content['repository']['name']
               . '项目的' . $content['ref'] . '分支push' . $res;
    //将每次拉取信息追加写入到日志里
    file_put_contents("git-webhook.txt", $res_log, FILE_APPEND);
}

function file_copy($src, $dst) {
    $dir = opendir($src);
    @mkdir($dst);
    while (false !== ($file = readdir($dir))) {
        if (($file != '.') && ($file != '..')) {
            if (is_dir($src . '/' . $file)) {
                file_copy($src . '/' . $file, $dst . '/' . $file);
            } else {
                copy($src . '/' . $file, $dst . '/' . $file);
            }
        }
    }
    closedir($dir);
}

php执行xsell_exec命令没反应?

  • 1、文件权限不够,执行命令 chmod 755 git-webhook.php 无效?执行命令 chmod 777 git-webhook.php
  • 2、在php.ini下进行更改(通过宝塔很容易看到,如下图) ,查找disable_function,去掉exec和xsell_exec,重启php
  • 小结

    流程就是,代码仓库向服务器发出指令告诉自己有更新,然后服务器收到指令去拉仓库新的代码,了解流程,再去看任何这类部署,就都是大致相通的。

    「两年博客,如果觉得我的文章对您有用,请帮助本站成长」

    赞(0) 打赏

    谢谢你请我吃鸡腿*^_^*

    支付宝
    微信
    0

    谢谢你请我吃鸡腿*^_^*

    支付宝
    微信
    标签:

    上一篇:

    下一篇:

    你可能感兴趣

    共有 0 条评论 - GitHub项目代码提交后自动同步部署到线上服务器

    博客简介

    唯品秀博客: weipxiu.com,一个关注Web前端开发技术、关注用户体验、坚持更多原创实战教程的个人网站,愿景:成为宇宙中最具有代表性的前端博客,期待您的参与,主题源码 

    精彩评论

    友情链接

    他们同样是一群网虫,却不是每天泡在网上游走在淘宝和网游之间、刷着本来就快要透支的信用卡。他们或许没有踏出国门一步,但同学却不局限在一国一校,而是遍及全球!申请交换友链

    站点统计

    • 文章总数: 235 篇
    • 草稿数目: 0 篇
    • 分类数目: 14 个
    • 独立页面: 6 个
    • 评论总数: 937 条
    • 链接总数: 13 个
    • 标签总数: 424 个
    • 建站时间: 1010 天
    • 注册用户: 2228 人
    • 访问总量: 8925383 次
    • 最近更新: 2019年9月19日
    服务热线:
     173xxxx7240

     QQ在线交流

     旺旺在线