开发者社区> 飞凡的陀螺> 正文

搭建Git服务器并感受hook使用

简介: 通常情况下我们都是将项目托管到Github,Coding等服务商。如果你有一台自己的Linux云主机,在上面搭建Git服务器比想象中要简单的多。这篇文章讲解如何搭建Git服务器及使用git的hook机制(使用post-receive这个hook,在gi...
+关注继续查看

通常情况下我们都是将项目托管到Github,Coding等服务商。如果你有一台自己的Linux云主机,在上面搭建Git服务器比想象中要简单的多。这篇文章讲解如何搭建Git服务器及使用git的hook机制(使用post-receive这个hook,在git服务器受到push请求,并且接受完代码提交时触发)

大致要执行下面的命令

# 创建一个名为git的用户,专门访问仓库,这里会问一系列问题,包括设置用户密码,请牢记
sudo adduser git
# 配置SSH,无密码访问服务器,这里不是本文重点,关于SSH配置请自行搜索,要创建 home/git/.ssh 目录,并设置权限
sudo chmod 700 /home/git/.ssh  
chmod 600 authorized_keys
# 创建项目目录,这里没有放到用户目录下
mkdir -p /usr/git_repo/gittest.git && cd ..  
# 建立一个裸仓库并设置该仓库目录的组权限为可写。
# 裸仓库就是一个只包含.git子目录的内容,不包含其他资料。
git init --bare --shared

# 好,服务端的仓库已经创建,下面是本地操作

# 开发人员小马先在本地创建一个git项目,将刚才创建的仓库设置为项目的远程仓库并推送分支。
git init
touch readme && vi readme
git add .
git commit -m 'add readme'
git remote add origin git@cloud:/usr/git_repo/gittest.git
git push origin master

# 小张作为另外一个开发人员,可以直接clone项目,并推送自己的改动
# 本地尝试访问并拉仓库。cloud是我配置ssh主机名称,也可以是IP地址或域名
# 如果不成功检查SSH的配置
git clone git@cloud:/usr/git_repo/gittest.git
cd gittest
vi readme
git commit -am 'fix the readme file'
git push origin master

是不是和Github的 git clone git@github.com:mafeifan/smzdm.git 很类似?但是Github还支持HTTP协议,比如 https://github.com/mafeifan/smzdm.git 想达到同样的目的,需要在服务器上针对apache或nginx配置 git-http-backend

使用服务器的hook

每当本地push代码,还得在服务器上git pull。这样太麻烦了。git支持hook机制,类似事件通知,比如git服务器收到push请求,并且接受完代码提交时触发。需要在hooks目录下创建post-receive文件
服务器操作

cd /usr/git_repo/gittest.git/hooks
sudo cp post-update.sample  post-receive
# 编辑post-receive内容为
echo $(date) >> hook.log

这样push代码到服务器,就会多出一个记录时间的hook.log
你可以优化内容,比如执行代码检查,git pull代码到/var/www,npm install,等操作。

使用托管网站的web-hook

以bitbucket为例,我在上面创建一个nodejs项目叫git-deploy-demo,暴露一个接口叫deploy,必须是post方法。项目跑在我自己的主机叫cloud。每次push代码,我让他调用这个deploy接口


img_be303e408b8af75e8902118780a494f6.png
image.png

关于deploy接口,接收调用后执行update.sh脚本

const exec = require('child_process').exec;
app.post('/deploy', (req, res) => {
  const commands = 'sh ./update.sh';
  exec(commands, (err, out, code) => {
    if (res.statusCode === 200) {
        res.send('deploy done');
    }else {
        res.send(out)
    }
  })

update.sh内容如下:

#!/bin/bash
git pull
npm install
sudo pm2 restart git-deploy-demo

参考:

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Git:Python代码开发到服务器上测试实践
Git:Python代码开发到服务器上测试实践
24 0
腾讯云搭建git+gerrit代码评审服务器
搭建git+gerrit代码评审服务器
35 0
手把手教你搭建自己的git+gerrit代码评审服务器
搭建自己的git+gerrit代码评审服务器
49 0
git本地上传和服务器拉取
包括本地上传和服务器拉取
44 0
搭建自用git服务器
搭建自用git服务器
86 0
使用Gitolite搭建Git服务器
Git 服务的管理工具,主要有如下几种。 Gitosis- 轻量级, 开源项目,使用 SSH 公钥认证,只能做到库级的权限控制。目前项目已经停止开发,不再维护。 Gitolite - 轻量级,开源项目
116 0
搭建Git服务器
本文参考于廖雪峰老师的博客Git 教程。依照其博客进行学习和记录,感谢其无私分享,也欢迎各位查看原文。 新用户家(home)目录下.shh/authorized_keys存放管理连接到 Git 远程仓
77 0
Git:Python代码开发到服务器上测试实践
Git:Python代码开发到服务器上测试实践
42 0
如何搭建一台属于自己的Git服务器?
在日常生活中,有很多开发组织在开发的时候大部分都会将代码提交到自己的Git服务器上,即公司内部的Git代码仓库;那很多小伙伴会问如果自己也想要一台属于自己的Git服务器该怎么办呢?接下来就是解开谜题的时候…
48 0
+关注
飞凡的陀螺
6年开发经验,擅长PHP,JavaScript
文章
问答
文章排行榜
最热
最新
相关电子书
更多
网站/服务器取证 实践与挑战
立即下载
固守服务器的第一道防线——美联集团堡垒机的前世今生
立即下载
机器学习在大规模服务器治理复杂场景的实践
立即下载
相关实验场景
更多