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

通常情况下我们都是将项目托管到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接口

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

参考:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏君赏技术博客

一键替换key的使用教程

22530
来自专栏李智的专栏

Windows下git安装使用教程

git status 此命令可以让我们时刻掌握仓库当前的状态,上面的命令告诉我们,readme.txt被修改过了,但还没有准备提交的修改。

16810
来自专栏张泽旭的专栏

Applet小应用程序之间的通讯

1、 首先解压:如何运行applet.zip文件,解压后如图

8630
来自专栏用户2442861的专栏

Ubuntu下的mysql安装

转载于http://blog.chinaunix.net/uid-26275986-id-4051976.html(如果不允许转载博主告诉我哈)

10530
来自专栏linux运维学习

linux学习第三十六篇:MariaDB安装,Apache安装

MariaDB安装 将待会下载的源码包放到这个目录下: cd /usr/local/src 下载源码包: wget https://downloads...

23480
来自专栏JetpropelledSnake

Linux学习笔记之Centos6.9安装Python3.6

如果本机安装了python2,尽量不要管他,使用python3运行python脚本就好,因为可能有程序依赖目前的python2环境,

9110
来自专栏北京马哥教育

只需五步,完美利用命令行工具创建LinuxMac系统下的网站备份

创建网站备份应该是一个网站管理员最为重要的日常工作之一。但现实情况是,备份这一步往往被很多人忽略,也就是说仍然有很多网管的网站安全意识较低。 所有的Linux/...

47490
来自专栏FreeBuf

看我如何使用Isip拦截、分析和修改网络数据包

今天给大家介绍的是一款名叫Isip的模拟工具,该工具套装可用于数据包修改、嗅探、模拟中间人攻击、模糊测试和模拟DoS攻击等等。

15420
来自专栏finleyMa

了解 php.ini

php.ini 有点复杂 首先php运行有命令行模式(比如 composer安装模块依赖)和 web模式(就是打开页面时正常模式) 两种模式加载的php.i...

37810
来自专栏玩转JavaEE

IntelliJ IDEA中创建Web聚合项目(Maven多模块项目)

Eclipse用多了,IntelliJ中创建Maven聚合项目可能有小伙伴还不太熟悉,我们今天就来看看。 IntelliJ中创建普通的Java聚合项目相对来说比...

1.4K90

扫码关注云+社区

领取腾讯云代金券