当前位置: 博客首页 >> 分享经验 >> 阅读正文

使用码云git的webhook实现生产环境代码的自动pull

作者: 郑晓 分类: 分享经验 发布于: 2018-05-31 23:53 浏览:145,145 评论(10)


普通公司小项目,传统更新线上代码是每次ftp/sftp上传,或提交到svn/git后再ssh到线上环境中去手动拉取代码,十分麻烦,虽然用上了版本控制,逼格还是不够高啊! 现在的线上仓库都支持hook技术,可以很方便的实现代码的自动化管理。比如我现在使用gitee.com仓库的webhook功能,监听master分支有push动作时,可以自动通过设置的hook通知生产环境中的脚本执行git pull拉取代码,自动更新,非常方便。

  1. 设置并使用公钥实现免密码 目标环境中使用 ssh-keygen -t rsa -C "xxxxx@zh30.com" #cat ~/.ssh/id_rsa.pub 查看公钥信息 一路回车生成公钥,在码云项目管理-部署公钥管理中,提交这个公钥串。 修改项目.git/config文件的url为如下格式 [remote "origin"] url = git@gitee.com:xxxxx/xxx.git git pull 测试

  2. 根目录或其它位置放一个php文作用webhook的通知接口,内容如下: // 本地仓库路径 项目目录 $local = '/home/wwwroot/your_project';</p> </li> </ol> <p>// 密码 gitee项目管理webhook中设置 $password = '654321';</p> <p>//如果请求体内容为空,返回错误 $payload = file_get_contents('php://input'); if (!$payload) { header('HTTP/1.1 400 Bad Request'); die('HTTP HEADER or POST is missing.'); }</p> <p>// 如果启用验证,并且验证失败,返回错误 // gitee默认返回json,解析json后验证密码 $data = json_decode($payload, true); if(empty($data) || $data['password'] != $password) { header('HTTP/1.1 403 Permission Denied'); die('Permission denied.'); }</p> <p>// 如果仓库目录不存在,返回错误 if (!is_dir($local)) { header('HTTP/1.1 500 Internal Server Error'); die('Local directory is missing')}</p> <p>//输出执行结果 包括错误信息,在gitee webhook中可以查看和测试 echo shell_exec("cd {$local} && git pull 2>&1"); die("done " . date('Y-m-d H:i:s', time()));

    1. 码云项目管理中,webhooks管理,添加,配置这个php的地址和对应的明文密码。保存测试,页面下方会显示最后一次的脚本执行信息。

    2. 执行出错的话,很多时候是权限问题。php脚本一般是由www或www-data等帐户权限来执行,所以整个项目目录对此帐户要有权限读写,比如全局chown -R www:www .。 可能需要把/root/.ssh和/root/.gitconfig 拷贝到/home/www中。

    真的非常好用,现在就不需要再登录到ssh上手动git pull更新了,本地开发完测试完成后,直接push到git后,线上就自动更新了~~

    参考文章:使用webhooks自动部署Github、GitLab、Gitee代码

       

本文采用知识共享署名-非商业性使用 3.0 中国大陆许可协议进行许可,转载时请注明出处及相应链接。

本文永久链接: https://www.zh30.com/webhook-git-pull.html

使用码云git的webhook实现生产环境代码的自动pull:目前有10 条留言

用户评论头像 123发表于 2020年12月03日 17:13[回复]

有没有pull时出现过js或css文件句柄被nginx占用导致pull失败的情况

用户评论头像 跪求大佬发表于 2020年03月26日 17:11[回复]

求大佬具体一点的实现服务器自动pull的教程

    用户评论头像 郑晓发表于 2020年03月26日 17:18[回复]

    这就是教程了啊, 你觉得哪里不明白,我改改

      用户评论头像 跪求大佬发表于 2020年03月26日 17:24[回复]

      我是小白,看起来就很懵逼的这种

        用户评论头像 123发表于 2020年04月12日 10:51[回复]

        试一试楼中楼

        用户评论头像 123发表于 2020年04月12日 10:52[回复]

        试一试楼中楼2

用户评论头像 ljx发表于 2018年08月27日 17:31[回复]

老哥, 你这个文本编辑器(博文内容)不怎么好看, 不打算换一个么

    用户评论头像 郑晓发表于 2018年08月28日 11:36[回复]

    麻烦,不想弄。

      用户评论头像 哈哈发表于 2018年09月19日 13:23[回复]

      我看还好,哈哈~

用户评论头像 小橙子发表于 2018年06月07日 01:11[回复]

对我这个小白来说有点干

发表评论

change vcode