在CentOS搭建Git服务器,部署hooks同步

来源:互联网 发布:c语言强制转换数据类型 编辑:程序博客网 时间:2024/05/18 14:26

前言

我们可以GitHub发布一些开源代码的公共仓库,但对于私密仓库就需要收费了。公司内部通常会搭建自己的Git服务器,我也通过在自己的服务器上搭建练习一下。

开始前先说一下服务器信息,这里是阿里云的CentOS 6.5 64位操作系统。

确认服务器是否安装Git

[root@iZ25r8k6ifuZ git]# rpm -qa git
git-1.7.1-3.el6_4.1.x86_64
这里也已经安装过了,如果没有安装可以用yum install git 安装。

------------------------------------------------------------------------------------------

 

1.首先安装git

yum install git

2.新建一个linux用户,起名为git

adduser git

3.在git用户目录中新建目录 .ssh

cd /home/git/mkdir .ssh

4.在/home/git/.ssh/目录中新建authorized_keys文件,并将客户端提供的公钥(id_rsa.pub)黏贴到该文件中

touch authorized_keys 或 vi authorized_keys

5.在项目目录创建一个git裸仓库,假如当前项目目录为/home/git/project.git

git init --bare project.git

6.将项目目录和git用户目录下的.ssh目录的所有者和所属组都设置成git

chown -R git.git project.git  chown -R git.git /home/git/.ssh/

7.为了安全考虑,禁用git用户的shell登录

vi /etc/passwd注释 ##git:x:500:500::/home/git:/bin/bash 改为 git:x:500:500:git version control:/home/git:/usr/bin/git-shell

8.git服务器打开RSA认证

vi /etc/ssh/sshd_config

下面3个打开

 1.RSAAuthentication yes      2.PubkeyAuthentication yes      3.AuthorizedKeysFile  .ssh/authorized_keys

重启 ssh   /etc/rc.d/init.d/sshd restart

 

client

1.生成公钥,并复制到剪切板

ssh-keygen -t rsapbcopy < ~/.ssh/id_rsa.pub

此步骤要将公钥发给git服务器管理员

2.在本地新建git仓库

git init

3.新建一个文件并推送到服务器

touch readme.txtgit add readme.txtgit commit -m "readme"git remote add origin git@xxx.xxx.xxx.xxx:/home/git/project.gitgit push origin master

注:如果提示需要密码,请检测公钥是否配置成功或RSA是否开启。


自己linux 测试
git clone git@192.168.223.128:/home/git/project.git /home/www/wwwroot/project

 

 

 

git hook 自动布署代码

假设你的项目也是跑在此台服务器上,那自动布署代码就很简单了,比如你的在线服务代码在 /home/www/wwwroot/project 文件夹中。

你先初始化代码库:


$ git clone /home/git/project.git /home/www/wwwroot/project

创建脚本

现在我们进入 /home/git/project.git 目录下的 hooks 文件夹,编辑脚本:

cd /home/git/project.git/hooks

vim post-receive

-------------------------------------------


#!/bin/sh 
# 删除 GIT_DIR 环境变量,避免干扰 
unset GIT_DIR 
# 增加生产环境项目路径环境变量 
WORKPATH=/home/www/wwwroot/project 
# 进入生产目录 
cd $WORKPATH git add . -A && git stash 
git pull origin master 
echo 'done!!!'


-------------------------------------------


chown -R git:git post-receive 
chmod +x post-receive

测试执行下
./post-receive 

 

---------------------------------------------------------------

如果报错
remote: No local changes to save
remote: error: cannot open .git/FETCH_HEAD: Permission denied
remote:
remote: done!!!

修改  
cd /home/www/wwwroot/project 
chown -R git:git .git

原创粉丝点击